simplexmlelement array php arrays stdclass

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.