Mailinglisten-Archive |
Hallo Jungs (und Mädels), ich habe einen Array mit folgendem Aufbau $array1[0] = array("a" => 3, "b" => 3); $array1[1] = array("a" => 9, "b" => 3); $array1[2] = array("a" => 11, "b" => 11); $array1[3] = array("a" => 11, "b" => 11); $array1[4] = array("a" => 15, "b" => 11); $array1[5] = array("a" => 2, "b" => 2); Ich möchte nun den array aufteilen in 2 arrays, wobei array1 alle Elemente enthält, wo a = b ist und array2 alle elemente mit a != b. Die richtige Lösung für obiges Zahlen beispiel wäre: gerade = 0,2,3,5 ungerade = 1,4 Gelöst habe ich das Problem mit folgendem Code: foreach ($array1 as $key = $val) { if ($val["a"] == $val["b"]) { $array2[] = array_splice($array1,$key,1); } } $array1 sollte nun nur noch aus den ungeraden Elementen bestehen, während $array2 alle geraden beinhaltet (mit einer etwas anderen Arraystruktur, aber das ist erstmal egal). Was aber herauskommt ist, dass $array1 (ungerade) 3 Elemente enthält. Der falsche fuffziger ist Element 3. In $array2 (gerade) sind zwar (korrekterweise) 4 Elemente vorhanden, aber das letzte Element ist leer. es fehlen die Daten von Element 3. Ich hab da einiges ausprobiert: Z.B. $array1 vorher kopiert und die Modifikation mit array_splice an dem unberührten array durchgeführt. Es bleibt bei diesem Fehler, ABER (jetzt kommts): Wenn ich die Bedingung genau andersrum formuliere mit if ($val["a"] != $val["b"]) arbeitet die Funktion korrekt. Probierts mal zuhause aus, ob ihr auf das gleiche Phänomen stosst. Ich benutze PHP 4.12 als Apachemodul unter Win2000. Ich bin der Meinung, dass ist ein Fehler in PHP. Aber vielleicht hab ich ja irgendein Detail übersehen. Klärt mich auf. Gruss, Sascha
php::bar PHP Wiki - Listenarchive