用PHP搜索json

时间:2013-01-18 23:23:03

标签: php json

我有一个格式为

的json文件
{
    "list" : {
           "1" : {
                "thing1" : "description",
                "thing2" : "description",
                "thing3" : "description"
            },
           "2" : {
                "thing1" : "description",
                "thing2" : "description",
                "thing3" : "description"
            },
            etc.

}

我需要根据事物2的描述搜索并返回数据,但我还需要返回列表的编号。问题是json文件中的数字全部乱序,所以我不能只是递增一个变量,因为我全部通过它们。

目前我的代码设置如下:

$json = json_decode($response);
foreach($json->list as $item) {
        $i++;
        if($item->thing2 == "description") {
            echo "<p>$item->thing1</p>";
            echo "<p>$item->thing2</p>";
            echo "<p>$item->thing3</p>";
            echo "<p>position: $i</p><br /><br />";
        }
    }

不幸的是,每当$ i变量重新调整错误位置时,位置都会出现故障。如何返回具有正确thing2描述的项目的标题。

3 个答案:

答案 0 :(得分:2)

更改

foreach($json->list as $item) {
    $i++;

foreach($json->list as $i => $item) {

(这在object iteration的PHP文档中有描述。)

答案 1 :(得分:1)

json_decode()的第二个参数设置为TRUE会返回一个关联数组,这更有利于您想要做的事情:

$json = json_decode($response, TRUE);
foreach($json['list'] as $key => $item) {
    if($item['thing2'] == "description") {
        echo "<p>$item['thing1']</p>";
        echo "<p>$item['thing2']</p>";
        echo "<p>$item['thing3']</p>";
        echo "<p>position: $key</p><br /><br />";
    }
}

应该做的伎俩。

答案 2 :(得分:-1)

json_decode可以选择返回关联数组($assoc = true)。在此之后,只需访问$associative_array["2"]即可。