2017-03-19 2 views
0

Ich möchte Duplikate auf der Grundlage von zwei Schlüsseln entfernen, dh a und b in meinem Fall und müssen die Werte im dritten Schlüssel anhängen, dh c und resultierende Array sollte ähnlich sein Werte am Index a und b sollten nicht wiederholt werden und Wert am dritten Index würde in einem neuen Array angehängt werden. Beispiel Arrays sind unten angegeben: Ich habe folgende Anordnung:Entfernen Sie doppelte in einem Array und fügen Sie Werte auf den gleichen Indizes an. Php

Array ( [0] => Array ( [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 
    ) 

)

und i wie dies zur Folge haben wollen:

Array ( [0] => Array ( [a] => 0 [b] => 0 [c] => Array ( [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 
      ) 

    ) 

)

Antwort

0

Iterate über die Anordnung von Elementen bereits gesehen, und fügen Sie das 'c' Element zu dem ursprünglichen Array zu verfolgen, wenn Sie bereits das Element vor (a/b-Combo gesehen haben) - Verwenden Sie als Funktion $flattened direkt, wenn Sie nicht möchten um es in eine Funktion zu stopfen.

$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

Wert auf 'c' Index wird nie gleich sein – user1888781

+0

Aber der Schlüssel wird der gleiche sein, oder? Ihr Beispiel zeigt, dass Sie nur den gleichen "c" -Wert wiederholen. Wollen Sie die c-Werte aller folgenden bereits vorhandenen Einträge anhängen und nicht einfach das Element wiederholen? – MatsLindh

+0

yeah ... Ich möchte sie anhängen ... im Beispiel sind sie gleich, aber im wirklichen Problem sind die verschieden .. und ich will a und b Index sowie – user1888781

Verwandte Themen