Php json解码与孩子

时间:2014-03-13 18:10:16

标签: php json

我一整天都在这里查看帖子,但无法弄清楚我做错了什么。 (我是php和json的新手)

这是我的代码。

    $json = '{"id":1234,"img":"1.jpg"}';
    $data = json_decode($json, true);
    echo $data["img"];

但当json回应是这个

    $json = '{"demo1":[{"id":1234,"img":"1.jpg"}],"userId":1}';
对我来说,这对我来说更难。然后img是demo1的孩子?如何获得它?

THX。 :)

2 个答案:

答案 0 :(得分:2)

计算出数组索引

当你是PHP新手时,我将解释如何找出所需数组值的数组。在PHP中,有许多用于调试的函数 - print_r()var_dump()是其中两个。 print_r()为我们提供了所提供数组的人类可读输出,var_dump()为我们提供了结构化输出以及变量类型和值。

在这种情况下,print_r()就足够了:

$json = '{"demo1":[{"id":1234,"img":"1.jpg"}],"userId":1}';
$data = json_decode($json, true);

// wrap the output in <pre> tags to get a prettier output

echo '<pre>';
print_r($data);
echo '</pre>';

这将产生以下输出:

Array
(
    [demo1] => Array
        (
            [0] => Array
                (
                    [id] => 1234
                    [img] => 1.jpg
                )

        )

    [userId] => 1
)

从那里,你应该很容易弄清楚如何访问所需的vaule。

$data['demo1'][0]['img'];

创建易于使用的辅助函数

为了便于使用,您可以创建一个辅助函数来简化此过程。每当您想要查看数组的内容时,只需调用dump_array($array);即可完成。不再需要使用<pre>代码或print_r()

功能代码:

function dump_array($array) {
    echo '<pre>' . print_r($array, TRUE) . '</pre>';
}

用法示例:

$arr = ['foo' => range('a','i'), 'bar' => range(1,9)];
dump_array($arr);

答案 1 :(得分:1)

解码后

echo $data->demo[0]->img;

基本上,JSON中的{会导致->(它是一个对象)。 而[[],它就是一个数组。