2017-02-17 2 views
2

Wie vergleiche ich die folgenden zwei Arrays? Wenn ich benutze:Zeige Array-Differenz funktioniert nicht

array_diff($array1, $array2) 

es alle Arrays in $ array1 nur zeigt nicht nur 39077

Array1 ([0] => 40016 [1] => 39995 [2] => 39990 [3] => 38921 [4] => 39890 [5] => 39812 [6] => 39672 [7] => 39767 [8] => 38709 [9] => 18631 [10] => 9503) 

Array2 ([0] => 40016 [1] => 39995 [2] => 39990 [3] => 38921 [4] => 39890 [5] => 39812 [6] => 39672 [7] => 39767 [8] => 38709 [9] => 18631 [10] => 9503 [11] => 39077) 

Wenn ich array_diff_keys verwenden, kann ich es in array1 mit 1234 als Wert betrügen, da diese Funktion nur überprüft wie viele Schlüssel nicht welche Werte haben. Das ist richtig, das PHP-Handbuch http://php.net/manual/en/function.array-diff.php sagen

Array1 ([0] => 40016 [1] => 39995 [2] => 39990 [3] => 38921 [4] => 39890 [5] => 39812 [6] => 39672 [7] => 39767 [8] => 38709 [9] => 18631 [10] => 9503 [11] => 1234) 

Array2 ([0] => 40016 [1] => 39995 [2] => 39990 [3] => 38921 [4] => 39890 [5] => 39812 [6] => 39672 [7] => 39767 [8] => 38709 [9] => 18631 [10] => 9503 [11] => 39077) 

wird der Ausgang

array() 
+0

aktualisiert ......... – Michael

+0

Das ist immer noch unklar, aber wenn du '39077' willst, musst du die Argumente' array_diff ($ array2, $ array1) '' – AbraCadaver

+0

tauschen. Aber dann zeigt es nur alle Werte in array2, bevor es alles in $ array1 war Unterschied zwischen – Michael

Antwort

1

sein, dass date_diff

Vergleicht array1 gegen einen oder mehrere andere Arrays und gibt die Werte in array1, die in keinem der anderen Arrays vorhanden sind.

und ist für einfache Array spezifisch und nicht für Schlüssel (assoziativen) Array .. so für Tastenfeld

nicht

arbeiten Könnten Sie

array_diff_key($array1, $array2) 

dass

müssen sein array_diff_key - Berechnet den Unterschied der Arrays mit den Schlüsseln für Vergleich

oder Wert können Sie verwenden array_diff_assoc

array_diff_assoc($array1, $array2); 
+0

Danke scaisEdge, tolle Funktion :) – Michael

+0

@Michael gut, wenn meine Antwort richtig ist bitte markieren Sie es als akzeptiert ... siehe hier http://meta.stackexchange.com/questions/5234/how-does-accepting-an -Antwort-Arbeit – scaisEdge

+0

Ich weiß wie, muss noch 5 Minuten warten :) – Michael

0

es zeigt nur alle Arrays in $ array1 nicht nur 39077

Nur Austausch Argument

array_diff($array2, $array1); 

Hinweis: Diese Antwort gibt die Werte in $ array2 zurück, die in $ array1 nicht vorhanden sind, sie gibt nicht die Werte in $ array1 zurück, die nicht in $ array2 sind.

Beispiel

$ php -r '$a1=array(1,2,3,7,8); $a2=array(1,2,7,10,15); print_r(array_diff($a2,$a1));' 
Array 
(
    [3] => 10 
    [4] => 15 
) 

Eingangs

$ cat test.php 
<?php 

$array1 = array(40016 , 39995 , 39990, 38921 , 39890 , 39812 , 39672 , 39767 , 38709 , 18631 , 9503); 
$array2 = array(40016 , 39995 , 39990, 38921 , 39890 , 39812 , 39672 , 39767 , 38709 , 18631 , 9503, 39077); 

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

?> 

Output

$ php test.php 
Array 
(
    [11] => 39077 
) 
+0

Es wird immer noch nicht funktionieren, es wird immer noch nicht nur das einzige Unterschied zwischen den beiden angezeigt .. – Michael

+0

was erwartet wird –

+0

Nur 39077 ........ – Michael

Verwandte Themen