将数组转换为雄辩的参数列表


Convert array to list of params for Eloquent

我正在尝试使用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

尝试使用 -

function quote($el){
  return '"'.$el.'"';
}
$quotedArr[] = array_map('quote', $array);
$paramStr = implode(',', $quotedArr);
$this->avg($paramStr);

你正在寻找 PHP call_user_func_array() 函数。

你会像这样使用它:

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

第一个参数是 callable 。第二个参数是要发送到callable的参数数组。


话虽如此,我不确定您的代码是否按预期方式工作。查看代码,似乎 avg() 方法首先只接受一列。你确定你得到了你想要的吗?