2017-04-07 1 views
0

Ich versuche die Strings in zwei verschiedenen Arrays zu vergleichen und die Anzahl der Unterschiede zwischen beiden Arrays auszugeben. Was mache ich falsch? Vielen Dank!PHP --- Arrays vergleichen, um die Anzahl der Unterschiede auszugeben

<?php 
$names = ['Tina', 'Dana', 'Mike', 'Amy', 'Adam']; 

$compare = ['Tina', 'Dean', 'Mel', 'Amy', 'Michael']; 

function outputDifferences($array1, $array2){ 

    $pushedArray = []; 

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

    // loop through the array 
    for($i = 0; $i < count($result[$i]) -1; $i++){ 

     array_push($pushedArray, $result[$i]); 

     $outcome = count($pushedArray); 
    } 

    return $outcome; 
    var_dump($outcome); 
} 
outputDifferences($names, $compare); 
+2

Wer sagt, dass Sie etwas falsch machen? Wir können es nicht wissen, da Sie uns nicht sagen, welche Ausgabe Sie erhalten oder welche Ausgabe Sie erwarten. – miken32

Antwort

0

In Ihrem Code zeigen Sie, dass Sie mit der count()-Funktion vertraut sind. Warum nicht einfach die gesuchte Nummer zurückgeben?

<?php 
function outputDifferences($array1, $array2){ 
    $result = array_diff($array1, $array2); 
    return count($result); 
} 

$names = ['Tina', 'Dana', 'Mike', 'Amy', 'Adam'];  
$compare = ['Tina', 'Dean', 'Mel', 'Amy', 'Michael']; 
echo outputDifferences($names, $compare); 

Wie, warum Ihr Original-Code ist es nicht funktioniert, sagt der Dokumentation für array_diff() „die Werte in array1 zurückgibt, die nicht in eine der anderen Arrays sind“ und dazu gehört auch ihre Schlüssel. In Ihrem Beispiel ist das Element 0 in beiden Arrays gleich, daher gibt es kein Element 0. Ihre for-Schleife muss zwangsläufig fehlschlagen. Verwenden Sie eine foreach-Schleife, um spärliche (d. H. Nicht zusammenhängende) Arrays zu durchlaufen.

+0

Danke Mann. Ja, ich habe es gerade herausgefunden, bevor ich deinen Kommentar gesehen habe. Ich schätze es. Ich habe nicht erkannt, dass array_diff() als Array zurückgegeben wurde. – ringside

+0

Nein, danke, nur ** upvote ** _any Antworten _ Sie fanden hilfreich, und ** Mark akzeptiert ** die _one Antwort_, die am besten Ihre Frage beantwortet! Dies markiert die Frage als "geschlossen" und gibt Ihnen Reputationspunkte. Siehe http://stackoverflow.com/help/someone-answers – miken32

Verwandte Themen