2016-02-13 55 views
0

我試圖使用Eloqunt avg函數。當我將我的專欄作爲參數列表傳遞時,它是有效的;轉換數組到列表的參數

$this->avg('column_two','column_one'); 

但是,當我通過$array它不;

$this->avg($array); 

這裏是一個dd(像陣列的var_dump所以你知道我在說什麼;

array:6 [▼ 
    0 => "column_0" 
    1 => "column_1" 
    2 => "column_2" 
    3 => "column_3" 
    4 => "column_4" 
    5 => "column_5" 
] 

我得到一個非常奇怪的錯誤;​​

ErrorException in Grammar.php line 58: 
strtolower() expects parameter 1 to be string, array given 

這可能看起來像一個基本的陣列問題,但我怎樣才能將該陣列轉換爲參數列表?

我能做的最好的是implode;

$array = implode(',', $array); 

但是,這隻會返回一個SQL錯誤;

ERROR: column "example_0,example_1" does not exist 
+0

爲什麼不使用'$ this-> avg($ array [2],$ array [1]);' – jitendrapurohit

+0

它是動態的。我不知道該數組中有多少項目或列名是什麼 – mikelovelyuk

回答

0

嘗試用 -

function quote($el){ 
    return '"'.$el.'"'; 
} 

$quotedArr[] = array_map('quote', $array); 
$paramStr = implode(',', $quotedArr); 

$this->avg($paramStr); 
+0

我覺得很難相信沒有PHP函數可以輕鬆地將其轉換爲我,而無需訴諸循環 – mikelovelyuk

+0

檢查更新的函數,請注意,這將傳遞數組中的所有值作爲參數 – jitendrapurohit

+0

嗯,我正在使用OOP,所以我不認爲這可以在沒有大量重寫的情況下進行放置和調用。放棄。無論如何感謝 – mikelovelyuk

0

您正在尋找的PHP call_user_func_array()功能。

你會使用這樣的:

$result = call_user_func_array([$this, 'avg'], $array); 

第一個參數是一個callable。第二個參數是要發送到callable的參數數組。


話雖如此,我不確定您的代碼是否按照您的預期工作。看看code,看起來avg()方法首先只接受一列。你確定你得到了你想要的嗎?

+0

啊。是的,在這種情況下,可能沒有正確使用它。該死的。那是浪費了幾個小時。 – mikelovelyuk