-2

我一直在尝试使用以下格式从 json 中提取数据:

[{"_type":"pipe","time":"2013-10-25 02:42:51","1_price":["00.00"],"1_name":["name"],"_template":"675fgy","1_purl":["http://"],"_cached_page_id":"te487","1_image":["image.jpeg"],"url":"http://"},
[{"_type":"pipe","time":"2013-10-25 02:42:55","1_price":["00.00"],"1_name":["name"],"_template":"16778f","1_purl":["http://"],"_cached_page_id":"456gt","1_image":["image.jpeg"],"url":"http://"},

我的以下代码返回“Array2013-10-25 02:42:51”即。它只返回“时间”的值似乎无法获得值“1_name”

请告诉我我做错了什么

    $url = "http://.../api.output";

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($ch, CURLOPT_URL,$url);

    $result=curl_exec($ch);

    $arr = json_decode($result, true);

    foreach($arr as  $val)
    {
    echo $val['1_name'];
    echo $val['time'];
    }
4

2 回答 2

0

像这样修改你的for循环

$i=0;
foreach($arr as  $k=>$v)
    {
    echo $arr['1_name'][$i];
    echo $arr['time'];
    $i++;
    }
于 2013-10-26T02:31:40.523 回答
0

如果您print_r是 的结果json_decode,您将看到如下内容:

Array
(
    [0] => Array
        (
            [_type] => pipe
            [time] => 2013-10-25 02:42:51
            [1_price] => Array
                (
                    [0] => 00.00
                )

            [1_name] => Array
                (
                    [0] => name
                )

            [_template] => 675fgy
            [1_purl] => Array
                (
                    [0] => http://
                )

            [_cached_page_id] => te487
            [1_image] => Array
                (
                    [0] => image.jpeg
                )

            [url] => http://
        )

    [1] => Array
        (
            [_type] => pipe
            [time] => 2013-10-25 02:42:55
            [1_price] => Array
                (
                    [0] => 00.00
                )

            [1_name] => Array
                (
                    [0] => name
                )

            [_template] => 16778f
            [1_purl] => Array
                (
                    [0] => http://
                )

            [_cached_page_id] => 456gt
            [1_image] => Array
                (
                    [0] => image.jpeg
                )

            [url] => http://
        )

)

所以,你有一个 Array in $arr,这使它成为一个好的变量名。

的第一个元素$arr有键0(这就是[0] =>意思),也是一个数组,但是是一个关联的(它有字符串作为键而不是数字)。第一个键是_type,第二个是time,依此类推。

如果您查看1_name键的值,您会发现它是另一个级别的 Array。它有一个条目,带有一个数字键。如果你想要那个值,那么你必须索引才能得到它。完整路径是$arr[0]['1_name'][0].

但是你不想要只是$arr[0],你想要 的所有元素$arr,所以你正在循环它们。没关系,这只是意味着$val代替$arr[whatever],所以你有$val['1_name'][0]1_price,等也是如此1_purl。但不适用于_typeortime或其他不显示数组的键。

于 2013-10-26T03:03:27.300 回答