2012-01-12 3 views
1

をマージ:PHP:多次元アレイ内の同じキーを見つけて、私はこのようになります多次元アレイを持っている調査結果に

$array = (
    [0] => array (
     ['WS'] => array(
      [id] => 2, 
      [name] => 'hello' 
      ) 
     ) 
    ), 
    [1] => array (
     ['SS'] => array(
      [id] => 1, 
      [name] => 'hello2' 
      ) 
     ) 
    ), 
    [2] => array (
     ['WS'] => array(
      [id] => 5, 
      [name] => 'helloAGAIN' 
      ) 
     ) 
) 

あなたが見ることができるように、$配列[0]と$配列[2 ]は同じ鍵[WS]を持っています。私はそれらの "同じキー"を見つけるための関数が必要です。その後、私はこれらの2つの配列を1つにマージします。 f.e.

$array = 
(
    [0] => array 
     (
      ['WS'] => array 
       (
        [0] => array 
         (
          [id] => 2, 
          [name] => 'hello' 
         ), 
        [1] => array 
         (
          [id] => 5, 
          [name] => 'helloAGAIN' 
         ) 
       ) 
     ), 
    [1] => array 
     (
      ['SS'] => array 
       (
        [0] => array 
         (
           [id] => 1, 
           [name] => 'hello2' 
         ) 
       ) 
     ) 
    ) 

あなたは私の問題を理解していることを願っています。 は、配列を

+2

なぜか繰り返しを繰り返して配列を再構築するのはなぜですか? 1回のパスと何らかの種類のキー参照配列がそれをカバーするはずです。 – JohnP

答えて

8
function group_by_key ($array) { 
    $result = array(); 
    foreach ($array as $sub) { 
    foreach ($sub as $k => $v) { 
     $result[$k][] = $v; 
    } 
    } 
    return $result; 
} 

See it working

+0

ありがとうございます。私のための非常に良い解決策。理解しやすく、うまく動作します。 – SnowBallz

1

することができますだけのループに挨拶し、一致する要素

を削除
$multiArray = array('0' => etc etc); 
    $matches = array(); 

    foreach(multiArray as $key => $val) 
    { 
     $keyValToCheck = key($val); 

     if(!in_array($keyValToCheck, $matches)) 
     { 
      $matches[] = $keyValToCheck; // add value to array matches 

      // remove item from array because match has been found 
      unset($multiArray[$key][$keyValToCheck]); 
     } 
    } 
1

あなたは、単にあなたの配列の最初のレベルを排除することができ、あなたのようなもので終わるだろうこれは:

$array = (
    ['WS'] => array(
     [0] => array(
       [id] => 2, 
       [name] => 'hello' 
     ), 
     [1] => array(
       [id] => 5, 
       [name] => 'helloAGAIN' 
     ) 
    ), 
    ['SS'] => array(
     [0] => array(
       [id] => 1, 
       [name] => 'hello2' 
     ) 
    ) 
) 

あなたの配列に次のようなものを追加することができます:

$array['WS'][] = array(); 
+1

thxたくさん:)配列のあなたの構造は私の問題の解決に私を導いてきました。アレイの構築についての私の考えは、はるかに複雑でした。 – SnowBallz

関連する問題