Php 使用递归lambda函数取消对简单数组的平坦化

Php 使用递归lambda函数取消对简单数组的平坦化,php,recursion,Php,Recursion,我一直在尝试用递归lambda函数来解平面数组,但我似乎无法理解它 $test = function( $a, $b ) use ( &$test ) { if ( ! count($a) ) return $b; $b[array_shift($a)] = []; // Missing logic here. return $test( $a, $b ); }; $newArr = $test( [0, 1, 2], [] ); echo "<p

我一直在尝试用递归lambda函数来解平面数组,但我似乎无法理解它

$test = function( $a, $b ) use ( &$test ) {
    if ( ! count($a) ) return $b;

    $b[array_shift($a)] = []; // Missing logic here.

    return $test( $a, $b );
};

$newArr = $test( [0, 1, 2], []  );

echo "<pre>";
print_r($newArr);
echo "</pre>";
进入:


你不需要第二个论点


您必须解释“//此处缺少逻辑”应该做什么。当没有在任何地方指定“test”时,从
[0,1,2]
[0=>[1=>[2=>'test']]
没有明显的路径。我猜
count
$c
也不需要:
返回$a?[array_shift($a)=>test($a)]:“test”是的,你是对的。但如果OP的代码几乎可以正常工作,我通常会尽可能多地节省,这是有道理的。不过,我不一定建议你改变你的答案。只是评论而已。@Don't没错,特别是考虑到你的代码非常优雅:)
[0, 1, 2] 
Array
(
    [0] => Array
        (
            [1] => Array
                (
                    [2] => test
                )
        )
)
$test = function( $a) use ( &$test ) {
    // the leaf element
    if ( ! count($a) ) return 'test';
    $c = array_shift($a);
    return [$c => $test($a)];
};

$newArr = $test( [0, 1, 2] );