Tengo un problema para convertir un objeto stdClass en matriz. He intentado de esta manera:
return (array) $booking;
o
return (array) json_decode($booking,true);
o
return (array) json_decode($booking);
La matriz antes del lanzamiento está llena con un registro, después de mi intento de lanzarlo está vacío. ¿Cómo emitirlo / convertirlo sin eliminar sus filas?
matriz antes del lanzamiento:
array(1) { [0]=> object(stdClass)#23 (36) { ["id"]=> string(1) "2" ["name"]=> string(0) "" ["code"]=> string(5) "56/13" } }
después de emitir está vacío NULL si intento hacer un var_dump($booking);
También probé esta función pero siempre está vacía:
public function objectToArray($d) {
if (is_object($d)) {
// Gets the properties of the given object
// with get_object_vars function
$d = get_object_vars($d);
}
if (is_array($d)) {
/*
* Return array converted to object
* Using __FUNCTION__ (Magic constant)
* for recursive call
*/
return array_map(__FUNCTION__, $d);
}
else {
// Return array
return $d;
}
}
return
. ¿Y correrjson_decode
en una matriz me parece bastante desesperado, probablemente sentado demasiado tiempo frente a la computadora y ahora es el momento de tomar un descanso?var_dump($booking);
productosNULL
?var_dump()
antes de lanzar. No reutilice el mismo nombre de variable por cierto. si$booking
era algo antes del lanzamiento, aún debería ser ese algo antes del lanzamiento y no algo diferente después. Diferir entre las variables de entrada y procesamiento, de lo contrario, se encontrará con problemas que ya no comprende lo que hace allí.Respuestas:
El método perezoso de una sola línea
Puede hacer esto en una línea usando los métodos JSON si está dispuesto a perder un poco de rendimiento (aunque algunos han informado que es más rápido que iterar a través de los objetos de forma recursiva, muy probablemente porque PHP es lento en las funciones de llamada ). " Pero ya hice esto ", dices. No exactamente: lo usó
json_decode
en la matriz, perojson_encode
primero debe codificarlo .Requisitos
El
json_encode
y losjson_decode
métodos. Estos se incluyen automáticamente en PHP 5.2.0 y versiones posteriores. Si usa cualquier versión anterior, también hay una biblioteca PECL (dicho esto, en ese caso realmente debería actualizar su instalación de PHP. El soporte para 5.1 se detuvo en 2006).Convertir un
array
/stdClass
->stdClass
Convertir un
array
/stdClass
->array
El manual especifica el segundo argumento de
json_decode
como:Por lo tanto, la siguiente línea convertirá todo su objeto en una matriz:
fuente
(array) $booking;
en unvar_dump
esNULL
(como está escrito por OP), ¿adivina qué devolverá este código?NULL
después de lanzarlo como una matriz. Creo que OP significa que esNULL
después de usar lojson_decode($array)
que tiene sentido según el manual . Se devuelve NULL si no se puede decodificar el jsonjson_decode()
una matriz.json_decode
debe usarse en una cadena JSON. Por lo tanto, si primero lo codificamos como una cadena JSON (json_encode
) y luego lo decodificamos (usando nuestra cadena JSON), entonces funciona bien.use esta función para obtener una matriz estándar del tipo que busca ...
fuente
Dado que es una matriz antes de lanzarlo, lanzarlo no tiene sentido.
Es posible que desee un reparto recursivo, que se vería así:
Uso:
Resultado anterior:
Resultado después de:
Nota:
Probado y trabajando con matrices complejas donde un objeto stdClass puede contener otros objetos stdClass.
fuente
Utilice la siguiente función php para convertir php stdClass a array
fuente
Esta función funcionó para mí:
Referencia: http://carlofontanos.com/convert-stdclass-object-to-array-in-php/
fuente
Utilice la funcionalidad integrada de conversión de texto, simplemente escriba
fuente
Simplemente busqué en Google y encontré aquí una función útil que es útil para convertir el objeto stdClass en una matriz de forma recursiva.
EDITAR : Actualicé esta respuesta con contenido de fuente vinculada (que también se ha cambiado ahora), gracias a mason81 por sugerirme.
fuente
Aquí hay una versión de la respuesta de Carlo que se puede usar en una clase:
fuente
El siguiente código leerá todos los correos electrónicos e imprimirá el Asunto, el Cuerpo y la Fecha.
Esto genera lo siguiente:
Habiendo luchado con varias sugerencias, he usado prueba y error para llegar a esta solución. Espero eso ayude.
fuente
Aquí está la mejor función Object to Array que tengo: funciona de forma recursiva:
$ clean_array = object_to_array ($ object_data_here);
fuente