Php 将func_get_参数连接到多维数组中
我在另一个网站上遇到了这个问题,在尝试了一个小时后(可能是我周日的大脑),我放弃了。问题是:如果有一个函数Php 将func_get_参数连接到多维数组中,php,arrays,recursion,multidimensional-array,Php,Arrays,Recursion,Multidimensional Array,我在另一个网站上遇到了这个问题,在尝试了一个小时后(可能是我周日的大脑),我放弃了。问题是:如果有一个函数foo: function foo(){} 该函数可以被称为(参数可以是=2,其中最后一个总是值,前一个是数组的一部分) 因此,将函数调用为: foo('arg1', 'value'); 应导致: $array['arg1'] = 'value'; 如果有多个参数,则相同: foo('arg1', 'argx', 'argz', 'value'); 应产生: $array['arg1
foo
:
function foo(){}
该函数可以被称为(参数可以是=2
,其中最后一个总是值,前一个是数组的一部分)
因此,将函数调用为:
foo('arg1', 'value');
应导致:
$array['arg1'] = 'value';
如果有多个参数,则相同:
foo('arg1', 'argx', 'argz', 'value');
应产生:
$array['arg1']['argx']['argz'] = 'value';
这是我的:
很确定,可能有一个更简单的解决方案,我现在想不出来。谢谢
function foo()
{
$items = func_get_args();
$value = array_pop($items);
$array = [];
$arrayPtr = &$array;
foreach ($items as $element) {
$arrayPtr[$element] = null;
$arrayPtr = &$arrayPtr[$element];
}
$arrayPtr[$element] = $value;
return $array;
}
var_dump(foo('arg1', 'argx', 'argz', 'value'));
通过使用
通过使用
像这样的东西怎么样
function foo()
{
$args = func_get_args();
$items = array_pop($args);
foreach (array_reverse($args) as $item) {
$items = array($item => $items);
}
return $items;
}
var_dump(foo('arg1', 'argx', 'argz', 'value'));
像这样的东西怎么样
function foo()
{
$args = func_get_args();
$items = array_pop($args);
foreach (array_reverse($args) as $item) {
$items = array($item => $items);
}
return $items;
}
var_dump(foo('arg1', 'argx', 'argz', 'value'));
好主意!我只需要更新指针,在末尾添加值:$arrayPtr[$element]=$value代码>->$arrayPtr=$value代码>以避免重复的最后一项。伟大的想法!我只需要更新指针,在末尾添加值:$arrayPtr[$element]=$value代码>->$arrayPtr=$value代码>以避免重复的最后一个条目。很好,我总是喜欢小任务的递归解决方案,这使事情变得更干净!因为马克抢先一步,我不得不想出另一个解决办法;-)但上次我检查call\u user\u func\u array
是一个相对昂贵的操作。由于这是一个小函数,引用的范围因此受到限制,所以我选择引用,而不是递归。很好,我总是喜欢小任务的递归解决方案,这会让事情变得更干净!因为马克抢先一步,我不得不想出另一个解决办法;-)但上次我检查call\u user\u func\u array
是一个相对昂贵的操作。由于这是一个小函数,引用的范围因此受到限制,所以我选择引用而不是递归。
<?php
function foo(...$items) {
if ( 1==count($items) ) {
return array_shift($items);
}
else {
$key = array_shift($items);
return array( $key=>call_user_func_array('foo', $items) );
}
}
var_dump(foo('arg1', 'argx', 'argz', 'value'));
function foo()
{
$args = func_get_args();
$items = array_pop($args);
foreach (array_reverse($args) as $item) {
$items = array($item => $items);
}
return $items;
}
var_dump(foo('arg1', 'argx', 'argz', 'value'));