phpbar.de logo

Mailinglisten-Archive

[php] Fehler in Funktion array_splice oder mach ich was falsch?

[php] Fehler in Funktion array_splice oder mach ich was falsch?

Sascha Hofmann php_(at)_phpcenter.de
Fri, 22 Mar 2002 15:29:02 +0100


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