2011-03-06 17 views
7

¿Cómo obtengo una matriz como resultado de json_decode()?Obtener un resultado de matriz de json_decode

que tenían una serie como esta:

$array = array(
    'mod_status' => 'yes', 
    'mod_newsnum' => 5 
); 

y yo guardado este en la base de datos como JSON codificar:

{"mod_status":"yes","mod_newsnum":5} 

Ahora quiero conseguir matriz de nuevo desde la base de datos. Pero cuando se utiliza:

$decode = json_decode($dbresult); 

me sale:

stdClass Object (
    [mod_status] => yes 
    [mod_newsnum] => 5 
) 

En lugar de una matriz. ¿Cómo puedo obtener una matriz en lugar de un objeto?

Respuesta

21

Establecer el segundo parámetro de json_decode true para forzar matrices asociativas:

$decode = json_decode($dbresult, true); 
+0

Esa debería ser la respuesta real. Mucho más útil para mí. – Stefan

7

Según http://in3.php.net/json_decode:

$decode = json_decode($dbresult, TRUE); 
+1

+1 Para poder utilizar la abreviatura de “leer la fina ** ** manual”. ;) – Gumbo

+0

F es para la maldita palabra "F": P – Kumar

+0

[Sé amable] (http://stackoverflow.com/faq#benice). –

0

Si sólo utiliza los datos en PHP Recomiendo el uso de serialize y unserialize lugar o de lo contrario nunca voy a ser capaz de diferenciar entre los objetos y las matrices asociativas, debido a la clase de objeto la información se pierde al codificar a JSON.

<?php 
class myClass{// this information will be lost when JSON encoding // 
    public function myMethod(){ 
     echo 'Hello there!'; 
    } 
} 
$x = array('a'=>1, 'b'=>2); 
$y = new myClass; 
$y->a = 1; 
$y->b = 2; 
echo json_encode($x), "\n", json_encode($y); // identical 
echo "\n", serialize($x), "\n", serialize($y); // not identical 
?> 

Run it.

+0

No responde la pregunta: debería ser un comentario en su lugar. –

+1

@Mark Propone una alternativa que puede ser mejor. Considero que ese tipo de respuestas también son válidas. Agregué algunos argumentos más en la última edición. –

2
$decode = json_decode($dbresult, true); 

O

$decode = (array)json_decode($dbresult); 
0

Lanzar el obje El resultado de ct de json_decode en una matriz puede tener resultados inesperados (y causar dolores de cabeza). Por este motivo, se recomienda utilizar json_decode($json, true) en lugar de (array)json_decode($json). He aquí un ejemplo:

Roto:

<?php 

$json = '{"14":"29","15":"30"}'; 
$data = json_decode($json); 
$data = (array)$data; 

// Array ([14] => 29 [15] => 30) 
print_r($data); 

// Array ([0] => 14 [1] => 15) 
print_r(array_keys($data)); 

// all of these fail 
echo $data["14"]; 
echo $data[14]; 
echo $data['14']; 

// this also fails 
foreach(array_keys($data) as $key) { 
    echo $data[$key]; 
} 

de Trabajo:

<?php 

$json = '{"14":"29","15":"30"}'; 
$data = json_decode($json, true); 

// Array ([14] => 29 [15] => 30) 
print_r($data); 

// Array ([0] => 14 [1] => 15) 
print_r(array_keys($data)); 

// all of these work 
echo $data["14"]; 
echo $data[14]; 
echo $data['14']; 

// this also works 
foreach(array_keys($data) as $key) { 
    echo $data[$key]; 
} 
Cuestiones relacionadas