Как получить массив в результате из json_decode()
?
У меня был массив вроде этого:
$array = array( 'mod_status' => 'yes', 'mod_newsnum' => 5 );
и я сохранил это в базе данных, как JSON encode:
{"mod_status":"yes","mod_newsnum":5}
Теперь я хочу получить массив снова из базы данных. Но когда я использую:
$decode = json_decode($dbresult);
Я получил:
stdClass Object ( [mod_status] => yes [mod_newsnum] => 5 )
Вместо массива. Как я могу получить массив вместо объекта?
Установите второй параметр json_decode
в true, чтобы заставить ассоциативные массивы:
$decode = json_decode($dbresult, true);
Согласно http://in3.php.net/json_decode :
$decode = json_decode($dbresult, TRUE);
$decode = json_decode($dbresult, true);
Или
$decode = (array)json_decode($dbresult);
Если вы используете эти данные только на PHP, я рекомендую использовать serialize
и unserialize
вместо этого, иначе вы никогда не сможете различать объекты и ассоциативные массивы, поскольку информация о классе объектов теряется при кодировании 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 ?>
Запустить его.
json_decode
результата объекта json_decode
в массив может иметь неожиданные результаты (и вызвать головные боли). Из-за этого рекомендуется использовать json_decode($json, true)
вместо (array)json_decode($json)
. Вот пример:
Разбитая:
<?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]; }
За работой:
<?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]; }