2017-07-01 23 views
1

多次元配列を1次元配列に変換する例が多数見つかりました。配列のデータをまとめて保持し、それらをネストから最初のメイン配列に持っていく必要があります。1次元多次元配列への入れ子多次元配列

Array 
(
    [0] => Array 
     (
      [id] => 2 
      [username] => user2 
      [downline] => Array 
       (
        [0] => Array 
         (
          [id] => 5 
          [username] => user5 
          [downline] => Array 
           (
            [0] => Array 
             (
              [id] => 9 
              [username] => user9 
              [downline] => Array 
               (
                [0] => Array 
                 (
                  [id] => 15 
                  [username] => user15 
                 ) 
                [1] => Array 
                 (
                  [id] => 16 
                  [username] => user16 
                 ) 
               ) 
             ) 
            [1] => Array 
             (
              [id] => 10 
              [username] => user10 
              [downline] => Array 
               (
                [0] => Array 
                 (
                  [id] => 17 
                  [username] => user17 
                 ) 
               ) 
             ) 
           ) 
         ) 
       ) 
     ) 
    [1] => Array 
     (
      [id] => 3 
      [username] => user3 
      [downline] => Array 
       (
        [0] => Array 
         (
          [id] => 6 
          [username] => user6 
          [downline] => Array 
           (
            [0] => Array 
             (
              [id] => 11 
              [username] => user11 
              [downline] => Array 
               (
                [0] => Array 
                 (
                  [id] => 18 
                  [username] => user18 
                 ) 
               ) 
             ) 
           ) 
         ) 
       ) 
     ) 
    [2] => Array 
     (
      [id] => 4 
      [username] => user4 
      [downline] => Array 
       (
        [0] => Array 
         (
          [id] => 7 
          [username] => user7 
          [downline] => Array 
           (
            [0] => Array 
             (
              [id] => 12 
              [username] => user12 
              [downline] => Array 
               (
                [0] => Array 
                 (
                  [id] => 19 
                  [username] => user19 
                 ) 
               ) 
             ) 
           ) 
         ) 
        [1] => Array 
         (
          [id] => 8 
          [username] => user8 
          [downline] => Array 
           (
            [0] => Array 
             (
              [id] => 13 
              [username] => user13 
             ) 
            [1] => Array 
             (
              [id] => 14 
              [username] => user14 
             ) 
           ) 
         ) 
       ) 
     ) 
) 

これは、すべてのチームメンバーをメッセージングのためである:ここでは

は配列です。私は彼らが誰であるか気にしない、私はすべてのユーザーの完全な実行リストが必要なので、私はループして、システムにメッセージを送信することができます。だからここ

は私が取得しようとしています最終配列の例です:

[ 
    [id] => 2 
    [username] => user2 
], 
[ 
    [id] => 5 
    [username] => user5 
], 
[ 
    [id] => 9 
    [username] => user9 
], 
[ 
    [id] => 15 
    [username] => user15 
], 
[ 
    [id] => 16 
    [username] => user16 
], 
[ 
    [id] => 10 
    [username] => user10 
], 
[ 
    [id] => 17 
    [username] => user17 
], 
[ 
    [id] => 3 
    [username] => user3] 
], 
// ... and so on 

理想的には、配列のキーはユーザーIDである可能性があります。これは、チームのメンバーを選ぶことができるドロップダウンメニューに表示されるか、それらのすべてにメッセージを送ることができます。このような何か:

[ 
    1 => 'user1', 
    2 => 'user2', 
    9 => 'user9', 
] 

私はarray_mergeのバリエーション、array_walk_recursiveを試してみました...すべてが一つだけ醜い1次元配列にそれをすべてを平ら..動作しませんでした。このような

何か、 :

function flatten(array $arr) { 
    return array_reduce($arr, function ($c, $a) { 
     return is_array($a) ? array_merge($c, flatten($a)) : array_merge($c, [$a]); 
    }, 
    []); 
} 

答えて

1

溶液consequtive ID /ユーザ名を収集する(array_walk_recursive関数を使用してペア):

// $arr is your initial array 
$result = []; 
array_walk_recursive($arr, function($v, $k) use (&$result){ 
    if ($k == 'id') $result[] = ['id'=> $v]; 
    if ($k == 'username') { 
     $result[count($result)-1]['username'] = $v; 
    } 
}); 
+0

ありがとう、あなたの命の恩人!私は子供(タブレット、音楽、ダンス)と妻を持っていて、今は集中できないようにしています。私は私が近くにいることを知っていたので、歩行を再帰的に正しく行かせることができませんでした。ありがとう! –

+0

@WadeShuler、よろしいですか? P.S. (私はあなたが列挙したものは何も持っていません。 – RomanPerekhrest