2013-03-12 5 views
-2

У меня есть массив объектов.Как json_decode массив объектов?

$arr = array(0 => o1, 1 => o2); 

Для этого я получил правильный json_encode. Скажем, у меня есть:

$json_data = json_encode($arr); 

НО, когда я json_decode в $json_data переменную с 2 аргумента верно я получаю все в виде массива:

array(0 => array, 1 =>array) 

с 2-го аргумента ложь я получаю все в формате объекта :

object(0 => object, 1 => object) 

Как вернуть исходный массив? То есть как получить

array(0 => object, 1 => object) 

Редактировать: перефразируя мой вопрос. Когда мы json_encode массива объектов, как вернуть один и тот же массив объектов, когда вы json_decode закодированные данные?

ответ

1

Я попытался следующий код на PHP 5.6.11-1ubuntu3.1 (кли), и на удивление получил именно то, что я хотел. Поскольку этот вопрос является настолько старым, я не помню, что такое версия PHP, когда я пробовал это во время публикации этого кода.

Код:

<?php 
class Test { 
     public $message = "this is message"; 
     public $number = 10; 
} 
$t1 = new Test(); 
$t2 = new Test(); 
$arr = array(0 => $t1, 1 => $t2); 
$json_data = json_encode($arr); 
var_dump($json_data); 
$original_array = json_decode($json_data, true); 
$original_object = json_decode($json_data, false); 
var_dump($original_array); 
var_dump($original_object); 
?> 

Выход я получаю:

string(85) "[{"message":"this is message","number":10},{"message":"this is message","number":10}]" 
array(2) { 
    [0]=> 
    array(2) { 
    ["message"]=> 
    string(15) "this is message" 
    ["number"]=> 
    int(10) 
    } 
    [1]=> 
    array(2) { 
    ["message"]=> 
    string(15) "this is message" 
    ["number"]=> 
    int(10) 
    } 
} 
array(2) { 
    [0]=> 
    object(stdClass)#3 (2) { 
    ["message"]=> 
    string(15) "this is message" 
    ["number"]=> 
    int(10) 
    } 
    [1]=> 
    object(stdClass)#4 (2) { 
    ["message"]=> 
    string(15) "this is message" 
    ["number"]=> 
    int(10) 
    } 
} 
0

Попробуйте это:

$arr  = array(0 => "o1", 1 => "o2"); 

$json_data = json_encode($arr); 

$res  = json_decode($json_data, true); 

echo "<pre>"; 
print_r($res); 

Выход:

Array 
(
    [0] => o1 
    [1] => o2 
) 
+0

То есть массив массивов. я хочу массив массивов. –

+0

Если входной массив содержит объекты, которые вы получите его в качестве объектов –

+0

Когда я называю json_decode только один аргумент (json_encoded данных) Что я получаю: Массив ( [0] => Массив [1] => Массив ) –