2016-08-10 6 views
0

Ich habe zwei Arrays, die ich zu vergleichen versuche. Eines der Arrays muss ich entfernen, wenn die Werte mindestens einmal im ersten Array vorhanden sind. Hier ist, was die Arrays wie folgt aussehen:Entfernen von Werten aus einem Array, wenn derselbe Wert in einem anderen Array vorhanden ist

array1: { 
    1: { 
     0: "1" 
    }, 
    1: { 
     0: "1" 
    }, 
    24: { 
     0: "24" 
    }, 
    24: { 
     0: "24" 
    }, 
    24: { 
     0: "24" 
    }, 
    24: { 
     0: "24" 
    }, 
    26: { 
     0: "26" 
    } 
}, 

array2: { 
    1: { 
     0: "blue" 
    }, 
    23: { 
     0: "yellow" 
    }, 
    24: { 
     0: "red" 
    }, 
    26: { 
     0: "green" 
    } 
}, 

Was muss ich tun Check array1 Schlüssel ist und wenn array2 die gleichen Werte im Schlüssel hat entferne sie aus dem Array 2. Also, für dieses Beispiel, das ich nur

am Ende mit sollte
array2: { 
    23: { 
     0: "yellow" 
    } 
} 

Ich muss dies für mehrere verschiedene Instanzen von Arrays, die ähnlich aussehen.

Ich habe versucht:

$result = array_diff($array1, $array2); 
print_r($result); 

und zurück:

{ 
    25: { 
     0: "25" 
    } 
} 
{ 
    24: { 
     0: "24" 
    } 
} 
{ 
    24: { 
     0: "24" 
    } 
} 

Während ich erkennen, dass es diese Werte ist zurückkehrt, weil es ein Vielfaches von ihnen in der ersten Reihe sind. Ich frage mich, wie ich die Doppelgänger ignorieren kann. Auch ich verstehe nicht, warum 23 nicht zurückgegeben wurde.

+0

Ein einfaches 'array_diff()' würde für ein gewöhnliches Problem umgehen, aber es sieht aus wie Sie es zu tun Arrays Arrays von 1 Element enthält, anstatt einfach mit mehreren ein Array mit Elemente. Ich weiß nicht, wie Sie es geschafft haben, sich selbst in diese Situation zu bringen, aber ich bin mir ziemlich sicher, dass Sie das zuerst nachschlagen sollten, statt nur fiesen umfangreichen Code zu schreiben, nur um mit dieser Komplikation fertig zu werden. – Havenard

+0

Wie ich im ursprünglichen Post gesagt habe, habe ich array_diff versucht. Ich bin auch zu http://php.net/manual/en/function.array-diff.php gegangen und lese die Dokumentation dort, um zu sehen, ob ich etwas herausfinden könnte. Ich habe versucht, dies für 2 Tage zu arbeiten, deshalb poste ich es hier. Außerdem habe ich nicht viel Kontrolle über die Arrays. – kemosabe

+0

@kamosabe Das ist, was ich sage, 'array_diff()' wird nicht funktionieren, weil Sie die Elemente nicht vergleichen, Sie vergleichen Arrays mit Arrays, weil Sie die tatsächlichen Informationen in einer zweiten Ebene geschachtelt haben. Das Vergleichen von Arrays mit Arrays funktioniert in PHP nicht und daher ist 'array_diff()' in diesem Fall nutzlos, aber die eigentliche Frage ist, warum zum Teufel hast du das überhaupt? – Havenard

Antwort

2

Sollte funktionieren:

<?php 
    foreach($array1 as $a1){ 
     unset($array2[$a1[0]]); 
    } 
?> 
+0

Sie müssen nicht prüfen, ob das Element gesetzt ist. So können Sie Zeile 3 entfernen, wenn Bedingung. – Prashanth

+0

Wahr :). So sei es – Bart

+0

Für mich selbst musste ich nach einem array_key_exists suchen. – kemosabe

Verwandte Themen