array - Error de PHP al convertir objetos a matrices
php xml to array (3)
Tuve esta pregunta antes y se concluyó que era un error en 5.2.5. Bueno, todavía está roto en 5.2.6, al menos para mí:
Por favor, hágame saber si está roto o funciona para usted:
$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";
}
¿Alguna forma de "arreglar" la matriz después de haber sido emitida desde una clase estándar?
Definitivamente me parece un error (PHP 5.2.6).
Puedes arreglar la matriz de esta manera:
$arr = array_combine(array_keys($arr), array_values($arr));
Se ha informado en este informe de fallos pero marcado como falso ... la documentación dice:
Las claves son los nombres de las variables miembro, con algunas excepciones notables: las propiedades enteras son inaccesibles;
Gracias RoBorg .. Acabo de descubrir eso también :)
Aquí hay otra solución, no estoy seguro si es más rápido o no:
unserialize(serialize($arr));
Un poco de experimentación muestra que las funciones propias de phps no persisten en esta rareza.
function noopa( $a ){ return $a; }
$arr = array_map(''noopa'', $arr );
$arr[0]; # no error!
Esto, en efecto, solo crea una copia de la matriz, y la corrección ocurre durante la copia.
En última instancia, es un fracaso de diseño en general, intente utilizar array_merge en la forma en que cree que funciona en una matriz con teclas mixtas numéricas y de cadena.
Todos los elementos numerados se copian y algunos se vuelven a numerar, incluso si algunos simplemente son números encapsulados en cadenas, y como resultado, hay docenas de implementaciones homebrew de array_merge solo para resolver este problema.
Cuando php intentó hacer un clon de perl y falló, no captaron el concepto de arreglos y hashes como conceptos distintos, y los englobaron en un paraguas universal. ¡Buen curso!.
Para su próximo truco, logran romper los delimitadores del espacio de nombres debido a algún problema técnico que ningún otro idioma ha encontrado por algún motivo.