Eu tenho um problema para converter um objeto stdClass em matriz. Eu tentei desta maneira:
return (array) $booking;
ou
return (array) json_decode($booking,true);
ou
return (array) json_decode($booking);
A matriz antes do elenco está cheia com um registro, depois que minha tentativa de elenco estiver vazia. Como converter / converter sem excluir suas linhas?
matriz antes do lançamento:
array(1) { [0]=> object(stdClass)#23 (36) { ["id"]=> string(1) "2" ["name"]=> string(0) "" ["code"]=> string(5) "56/13" } }
depois que o elenco estiver vazio NULL se eu tentar fazer uma var_dump($booking);
Eu também tentei esta função, mas sempre vazio:
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
. E rodarjson_decode
em uma matriz parece bastante desesperador para mim, provavelmente sentado demais na frente do computador e agora é hora de fazer uma pausa?var_dump($booking);
saídasNULL
?var_dump()
antes de lançar. Não reutilize o mesmo nome de variável btw. se$booking
havia algo antes do lançamento, ainda deve ser algo antes do lançamento e não algo diferente depois. Diferir entre as variáveis de entrada e de processamento, caso contrário, você terá problemas que não entenderão mais o que faz lá.Respostas:
O método preguiçoso de uma linha
Você pode fazer isso em uma linha usando os métodos JSON, se estiver disposto a perder um pouquinho de desempenho (embora alguns tenham relatado que é mais rápido do que repetindo os objetos de forma recursiva - provavelmente porque o PHP é lento em chamar funções ). " Mas eu já fiz isso ", você diz. Não exatamente - você usou
json_decode
na matriz, mas precisa codificá-lajson_encode
primeiro.Exigências
A
json_encode
ejson_decode
métodos. Estes são agrupados automaticamente no PHP 5.2.0 e posterior. Se você usa qualquer versão mais antiga, há também uma biblioteca PECL (ou seja, nesse caso, você deve realmente atualizar sua instalação do PHP. O suporte para 5.1 parou em 2006.)Convertendo um
array
/stdClass
->stdClass
Convertendo um
array
/stdClass
->array
O manual especifica o segundo argumento de
json_decode
:Portanto, a seguinte linha converterá todo o objeto em uma matriz:
fonte
(array) $booking;
em umvar_dump
éNULL
(conforme escrito pelo OP), adivinhe o que esse código retornará?NULL
depois de lançá-lo como uma matriz. Eu acho que OP significa que éNULL
depois de usar ojson_decode($array)
que faz sentido de acordo com o manual . NULL é retornado se o json não puder ser decodificado.json_decode()
uma matriz.json_decode
deve ser usado em uma sequência JSON. Portanto, se a codificarmos como uma string JSON primeiro (json_encode
) e depois a decodificar (usando nossa string JSON), funcionará bem.use esta função para obter uma matriz padrão de volta do tipo que você procura ...
fonte
Como é uma matriz antes da transmissão, a transmissão não faz sentido.
Você pode querer um elenco recursivo, que seria algo como isto:
Uso:
Resultado antes:
Resultado após:
Nota:
Testado e trabalhando com matrizes complexas em que um objeto stdClass pode conter outros objetos stdClass.
fonte
Por favor, use a seguinte função php para converter php stdClass em array
fonte
Esta função funcionou para mim:
Referência: http://carlofontanos.com/convert-stdclass-object-to-array-in-php/
fonte
Use a funcionalidade de conversão de tipo incorporada, basta digitar
fonte
Apenas pesquisei no Google e encontrei aqui uma função útil que é útil para converter recursivamente o objeto stdClass.
EDIT : Atualizei esta resposta com o conteúdo da fonte vinculada (que também foi alterada agora), graças a mason81 por me sugerir.
fonte
Aqui está uma versão da resposta de Carlo que pode ser usada em uma classe:
fonte
O código a seguir irá ler todos os e-mails e imprimir Assunto, Corpo e Data.
Isso gera o seguinte:
Tendo lutado com várias sugestões, usei tentativa e erro para encontrar esta solução. Espero que ajude.
fonte
Aqui está a melhor função Object to Array que eu tenho - funciona recursivamente:
$ clean_array = object_to_array ($ object_data_here);
fonte