Frage

Ich hatte diese Frage früher und es wurde geschlossen es ein Fehler in 5.2.5 war. Nun, es ist immer noch in 5.2.6 gebrochen, zumindest für mich:

Bitte lassen Sie mich wissen, wenn es defekt ist oder arbeitet für Sie:

$obj = new stdClass();
$obj->{"foo"} = "bar";
$obj->{"0"} = "zero";
$arr = (array)$obj;

//foo -- bar
//0 --    {error: undefined index}
foreach ($arr as $key=>$value){
    echo "$key -- " . $arr[$key] . "\n";
}

Alle Möglichkeiten zu „reparieren“ das Array, nachdem es von einem stdClass gegossen wurde?

War es hilfreich?

Lösung

scheint auf jeden Fall wie ein Bug zu mir (PHP 5.2.6).

Sie können das Array wie dieses Problem zu beheben:

$arr = array_combine(array_keys($arr), array_values($arr));

Es ist berichtet worden, in diesem Bugreport aber als falsche markiert .. . die Dokumentation sagt :

  

Die Tasten sind die Membervariable   Namen, mit einigen bemerkenswerten Ausnahmen:   integer Objekte sind unaccessible;

Andere Tipps

Ein bisschen Experimentieren zeigt phps eigenen Funktionen nicht bestehen diese fubarity.

function noopa( $a ){ return $a; }
$arr = array_map('noopa', $arr ); 
$arr[0]; # no error! 

Diese in der Tat schafft nur eine Kopie des Arrays, und das Update erfolgt während der Kopie.

Schließlich ist es ein Konstruktionsfehler auf der ganzen Linie, versuchen Sie denken, mit array_merge in der Art und Weise funktioniert es auf einem Array mit gemischten numerischen und String-Schlüssel?

Alle nummerierten Elemente erhalten kopiert und einige neu nummeriert, auch wenn einige nur passieren String-verkapselten Zahlen, und als Folge sein, gibt es Dutzende von Homebrew-Implementierungen von array_merge nur dieses Problem zu lösen.

Zurück, wenn PHP einen Klon von Perl zu machen versucht und sind gescheitert, haben sie das Konzept von Arrays und Hashes sind unterschiedliche Konzepte nicht begreifen, ein globbed sie stattdessen zusammen in einem Universal-Regenschirm. Gut gemacht !.

Für ihren nächsten Trick gelingt es ihnen, Namespace-Trennzeichen zu brechen, weil einige technische Problem, dass keine andere Sprache aus irgendeinem Grund angetroffen hat.

Danke RoBorg .. ich gerade entdeckt, dass auch:)

Hier ist eine andere Lösung, nicht sicher, ob es schneller ist oder nicht:

unserialize(serialize($arr));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top