我试图使用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
这看起来像是一个基本的数组问题,但是如何将该数组转换为params列表呢?
我能做的最好的事情是implode
;
$array = implode(',', $array);
但那只会返回一个SQL错误;
ERROR: column "example_0,example_1" does not exist
答案 0 :(得分:0)
尝试 -
function quote($el){
return '"'.$el.'"';
}
$quotedArr[] = array_map('quote', $array);
$paramStr = implode(',', $quotedArr);
$this->avg($paramStr);
答案 1 :(得分:0)
您正在寻找PHP call_user_func_array()
功能。
您可以这样使用它:
$result = call_user_func_array([$this, 'avg'], $array);
第一个参数是callable
。第二个参数是要发送到callable
的参数数组。
话虽如此,我不确定您的代码是否按预期方式运行。看一下code,似乎avg()
方法首先只接受一列。你确定你得到了你想要的东西吗?