Question

J'avais cette question plus tôt et il a été conclu qu'il s'agissait d'un bogue dans la 5.2.5. Eh bien, il est toujours cassé en 5.2.6, du moins pour moi:

Faites-moi savoir s'il est cassé ou s'il fonctionne pour vous:

$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";
}

Tout moyen de "réparer" le tableau après qu'il ait été lancé depuis un stdClass?

Était-ce utile?

La solution

Cela me semble être un bogue (PHP 5.2.6).

Vous pouvez réparer le tableau comme suit:

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

Cela a été rapporté dans ce rapport de bogue , mais qualifié de faux. . la documentation indique :

  

Les clés sont la variable membre   noms, à quelques exceptions notables près:   les propriétés entières ne sont pas accessibles;

Autres conseils

Un peu d’expérimentation montre que les fonctions propres de phps ne persistent pas dans cette fubarité.

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

En effet, cela crée simplement une copie du tableau et le correctif se produit pendant la copie.

En fin de compte, c’est un échec de la conception sur tout le tableau. Essayez d’utiliser array_merge de la façon dont vous pensez qu’il fonctionne sur un tableau avec des clés numériques et des chaînes de caractères mixtes.

Tous les éléments numérotés sont copiés et certains sont renumérotés, même si certains ne sont que des chaînes de caractères encapsulés. Il en résulte des dizaines d'implémentations homebrew de array_merge uniquement pour résoudre ce problème.

À l'époque où php tentait de créer un clone de perl et échouait, ils ne comprenaient pas le concept de tableaux et de hachages étant des concepts distincts, mais les regroupaient dans un même parapluie universel. Bon déroulement!.

Pour leur tour suivant, ils parviennent à rompre les délimiteurs d’espace de noms en raison d’un problème technique qu’aucune autre langue n’a rencontré pour une raison quelconque.

Merci RoBorg .. Je viens de découvrir cela aussi:)

Voici une autre solution, ne sachant pas si c'est plus rapide ou pas:

unserialize(serialize($arr));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top