-2

我有一个对象数组。

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

我为此得到了正确的 json_encode。说,我有:

$json_data = json_encode($arr);

但是,当我使用第二个参数为 truejson_decode$json_data变量时,我得到了数组格式的所有内容:

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

使用第二个参数 false 我得到对象格式的所有内容:

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

如何取回原始数组?即如何获得

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

编辑:解释我的问题。当我们json_encode一个对象数组时,当你json_decode编码数据时,如何取回相同的对象数组呢?

4

2 回答 2

1

我在 PHP 5.6.11-1ubuntu3.1 (cli) 上尝试了以下代码,出人意料地得到了我想要的。由于这个问题太老了,我不记得在发布此代码时尝试此问题时的 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)
  }
}
于 2015-11-20T14:36:26.323 回答
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
)
于 2013-03-12T07:41:00.610 回答