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