2017-11-29 14 views
0

私は再帰的なラムダ関数を使って配列を平坦化しようとしていましたが、その周りに頭を浮かべているようです。単純な配列を再帰的なラムダ関数で平坦化しない

$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>"; 

コードですが、私は何をすべきかは考えていない「//ここに行方不明のロジックを。」部。

私は、この再帰的なラムダ関数が

[0, 1, 2] 

に変換したい:あなたは2番目の引数を必要としない

Array 
(
    [0] => Array 
     (
      [1] => Array 
       (
        [2] => test 
       ) 
     ) 
) 
+2

あなたに'dはexにする必要があるまさに「//ここに欠けているロジック」が何をすべきかを明白にしてください。 "test"がどこにも指定されていないとき、 '[0、1、2]'から '[0 => [1 => [2 => 'test']]]' – cHao

答えて

1

$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]); 

demo

+1

'count'と' $ c'は必要ないと思います: 'return $ a? [array_shift($ a)=> $ test($ a)]: 'test'; ' –

+1

はい、そうです。しかし、OPのコードがほとんど動いているなら、私は通常、できるだけ多くを保存します。 – splash58

+1

それは理にかなっています。あなたの答えを変えなければならないとは必ずしも言いませんでした。ただコメントする。 –

関連する問題