将数组转换为链方法



我有一个这样的数组。。。

$data = [
'columns' => [
[['increments', 'id']],
[['string', 'key'], ['index']],
[['text', 'value']],
]
];

第一个值是函数名称,第二个值是arg/args(参数(。我希望每个都像这样运行($table(。。。

$table->increments('id');
$table->string('key')->index();
$table->text('value');

我试着用循环迭代数组,并使用函数作为数组[$functionName($params(]方法以及"call_user_func"。但失败了。像上面的例子一样,一个接一个地调用这些函数的最佳方式是什么?

正如@IslamElshobokshy所提到的,这是一个可疑的请求,这可能意味着你的设计一开始就有缺陷/效率低下。

如果你真的需要这样做,试试这样的方法:

foreach ($data['columns'] as $calls) {
$currentValue = $table;
foreach ($calls as $call) {
$methodName = $call[0];
$methodArgs = array_slice($call, 1);
$currentValue = $currentValue->$methodName(...$methodArgs);
}
}

这使用了变量函数/方法和参数拆包。

最新更新