2017-03-19 9 views
0

2つのキー、つまり私の場合は2つのキーに基づいて重複を削除し、3番目のキーに値を追加する必要があります。インデックスaとbの値は反復してはならず、3番目のインデックスの値は新しい配列に追加されます。例えば配列は以下の通りである: Iは、配列次た:配列内の重複を削除して同じインデックスに値を追加する

アレイ ( [0] =>配列 ( [A] => 0 [B] => 0 [C] => 123 を)

[1] => Array 
    (
     [a] => 1 
     [b] => 0 
     [c] => 43134 
    ) 

[2] => Array 
    (
     [a] => 0 
     [b] => 4 
     [c] => 5423 
    ) 

[3] => Array 
    (
     [a] => 0 
     [b] => 3 
     [c] => 2342 
    ) 

[4] => Array 
    (
     [a] => 0 
     [b] => 0 
     [c] => 123 
    ) 

[5] => Array 
    (
     [a] => 1 
     [b] => 0 
     [c] => 43134 
    ) 

[6] => Array 
    (
     [a] => 0 
     [b] => 4 
     [c] => 5423 
    ) 

[7] => Array 
    (
     [a] => 0 
     [b] => 3 
     [c] => 2342 
    ) 

と私はこのような結果たい:

アレイ ( [0] =>配列 ( [A] => 0 [B] => 0 [C] =>配列 ( [0] => 123 [1] => 123 )

) 

[1] => Array 
    (
     [a] => 1 
     [b] => 0 
     [c] => Array 
      (
       [0] => 43134 
       [1] => 43134 
      ) 

    ) 

[2] => Array 
    (
     [a] => 0 
     [b] => 4 
     [c] => Array 
      (
       [0] => 5423 
       [1] => 5423 
      ) 

    ) 

[3] => Array 
    (
     [a] => 0 
     [b] => 3 
     [c] => Array 
      (
       [0] => 2342 
       [1] => 2342 
      ) 

    ) 

)アレイ全体

答えて

0

反復、既に見て、あなたはすでに)A/Bのコンボ(前の要素を見てきた場合は、元の配列に「C」の要素を追加する要素を追跡します - 機能として - 使用しない場合は直接$flattenedを使用してくださいそれを関数に含めること。

$result = array(); 

for ($i = 0; $i < count($arr); $i++) 
{ 
    $a = $arr[$i]['a']; 
    $b = $arr[$i]['b']; 

    if (isset($result[$a][$b])) 
    { 
     // append the 'c' value 
     $result[$a][$b]['c'][] = $arr[$i]['c']; 
     // we've already seen the a/b combo 
     continue; 
    } 

    // convert 'c' key to an array 
    $arr[$i]['c'] = array($arr[$i]['c']); 

    // keep the result 
    $result[$a][$b] = $arr[$i]; 
} 

$flattened = array(); 

// flatten the a/b structure to only keep the elements themselves 
foreach ($result as $a => $b_level) { 
    foreach ($b_level as $b => $element) { 
     $flattened[] = $element; 
    } 
} 

return $flattened; 
+0

'c'インデックスの値は決して同じではありません – user1888781

+0

しかし、キーは同じでしょうか?あなたの例は、同じ 'c'値を繰り返すだけであることを示しています。既に存在する次のすべての要素のc値を追加し、要素を繰り返すのではないのですか? – MatsLindh

+0

ええ...私はそれらを追加したい...それらは同じであるが、実際の問題でそれらは異なっている..そして私はまた、インデックスと同様にしたい – user1888781

関連する問題