2010-03-04 6 views
5
(I'm a beginner) 

Mein Skript verwendet den Standardarray_diff & Umnummerierung Zifferntasten

$c = 0; 
$t = count($array); 

while ($c < $t) { 
    $blah = $array[$c]; 
    ++$c; 
} 

ziemlich umfangreich. Aber ich bin gerade in eine Situation gerannt, in der ich auch array_diff brauche und es bricht alles zur Hölle, weil jetzt die numerischen Tasten Lücken haben. Ich bekomme Undefined offset Fehler überall.

Wie setze ich die numerischen Tasten eines Arrays zurück? Die Reihenfolge der Objekte im Array ist irrelevant.

Antwort

25

die Schlüssel zum Zurücksetzen Sie array_values() verwenden können:

$array = array_values($array); 
7

Sie müssen die Schlüssel Sie Array nicht zurück: Sie haben so, wie Sie durch sie gehen zu ändern.

Statt eine while Schleife verwenden und die Array-elemnts durch den Index zugreifen, sollten Sie eine foreach-Schleife verwenden, die nur Sie Elemente aus dem Array erhalten:

foreach ($array as $key => $value) { 
    // $key contains the index of the current element 
    // $value contains the value of the current element 
} 
+0

+1 für Sie, weil ich dieses Wissen sicherlich woanders verwenden werde. Aber der Scheck muss nach Tatu gehen, um das Bullseye zu treffen. Danke Pascal. – Drew

+0

@Andrew: Gern geschehen :-) ;; Ja, ich weiß, dass ich die Frage nicht wirklich beantwortet habe, aber ich dachte, das wäre sowieso nützlich * (und ich benutze immer foreach, um Array-Elemente zu durchlaufen) * ;; und als ich eine andere Antwort sah, die bereits über die 'array_values' sprach, habe ich sie nicht in meine aufgenommen. –

+0

Ich weiß es zu schätzen, dass Sie sich die Zeit genommen haben zu antworten, das tue ich wirklich. Ich bekomme immernoch feuchte Füße und erkenne mich in der Phase "Ich habe einen richtig guten Hammer" zu programmieren. Also noch einmal, vielen Dank für die expansive und hilfreiche Push die Straße in Richtung geeigneter Code-Design. – Drew

2

Danke Tatu.

Für die lulz, ich mit Ihnen die folgenden Idiot Hack, den ich während für eine vernünftige Antwort zu warten verwendet werden teilen:

$badArray = array_diff($allData, $myData); 

$string = implode(",",$badArray); 

$dump = explode(",",$string); 

$goodArray = $dump; 

gearbeitet. Ich habe mich total schmutzig gefühlt, aber es hat funktioniert.

Verwandte Themen