2017-03-07 25 views
0

我知道這是一個奇怪的問題,但我已經宣佈這樣一個靜態方法:PHP - 傳遞參數並將其轉換爲同一行?

public static function getCountForTypesByModificationYear($year, $filter = null) { 
    $filter["modification year"] = $year; 
    return self::getCountForTypes($filter); 
} 

它需要一個參數(一年)和可選的額外的過濾選項的關聯數組。第一行確保$filter數組只有一個modification year鍵(我將其作爲第一個參數提供),第二行使用SQL查詢觸發該方法以計算所選過濾器的潛在結果。

他們是不言自明,簡單的我的目的,但我想看看有辦法讓這兩條線成一個班輪訴諸功能,如array_merge_recursive()call_user_func()

這可以減少嗎?

回答

1

如果所有你關心的是使其在同一行,你可以試試下面的:

public static function getCountForTypesByModificationYear($year, $filter = null) { 
    return self::getCountForTypes(($filter["modification year"] = $year) ? $filter : null); 
} 

但是,我不確定它是否會更好地表現明智。

或者你也可以做,

return self::getCountForTypes(["modification year" => $year] + $filter); 
+0

我確定它有現在,所以我會嘗試第二個表現。謝謝! :) –

+0

第二種方法是我所需要的。對於所有測試用例,它幾乎快5%!我欠你一杯啤酒:) –

+0

我很高興我能幫忙,乾杯:D –

1

你只能通過一些函數調用來做到這一點,比如array_merge函數。 像($filter['xx']=123)回右側操作數的數值表達

public static function getCountForTypesByModificationYear($year, $filter = null) 
{ 
    return self::getCountForTypes(array_merge($filter,["modification_yer"=> $year])); 
} 

另外,在你的榜樣,如果你不使用的類型提示「陣」和$filter默認值設置爲空 - 你應該確保$filter是陣列

public static function getCountForTypesByModificationYear($year, $filter = null) 
{ 
    if(!is_array($filter)) throw new \InvalidArgumentException(); 
    return self::getCountForTypes(array_merge($filter,["modification_yer"=> $year])); 
} 
相關問題