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'));