2016-02-13 53 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