【问题标题】:Convert array to list of params for Eloquent将数组转换为 Eloquent 的参数列表
【发布时间】:2016-05-24 17:33:36
【问题描述】:

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

【问题讨论】:

  • 为什么不使用$this->avg($array[2],$array[1]);
  • 它是动态的。我不知道数组中有多少项或列名是什么

标签: php arrays laravel eloquent


【解决方案1】:

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

你会这样使用它:

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

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


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

【讨论】:

  • 啊。是的,在那种情况下,可能没有正确使用它。该死。这浪费了几个小时。
【解决方案2】:

试试 -

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

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

$this->avg($paramStr);

【讨论】:

  • 我很难相信没有 PHP 函数可以为我轻松转换它而无需求助于循环
  • 检查更新的,注意这会将数组中的所有值作为参数传递
  • 好吧,我正在使用 OOP,所以我认为如果不进行大量重写,就不能在任何地方放置和调用它。放弃。还是谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
  • 2023-03-14
  • 2015-11-29
  • 2010-11-21
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
相关资源
最近更新 更多