Php 使用递归lambda函数取消对简单数组的平坦化
我一直在尝试用递归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
$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] );