使用PHP在JSON数组中查找项目

时间:2013-06-06 17:23:58

标签: php json

我找到了一个很好的答案但没有找到答案。

API返回类似此[{id:31, name:"blue"},{id:22, name:"green"},..]

的JSON

我想从ID $api->[where id= 2]

获取名称

我找到的唯一方法是将此数组转换为obj并将id作为键。有没有更好的PHP方式?

4 个答案:

答案 0 :(得分:4)

您的解决方案的最佳方式。类似的东西:

$results = json_decode($returned_JSON_string);

foreach($results as $result) {
    if($result->id == 2) {
        // Match!
        break;
    }
}

如果您不喜欢json_decode创建object的默认行为,可以指示它创建array,如下所示:

 $results = json_decode($returned_JSON_string, true);

答案 1 :(得分:2)

我认为您可以将json编码为关联数组

$arr = json_decode($json, true); //note true as second parameter because we want as associative array

现在你可以用

来调用它
echo $arr[1]['id'];

或循环数组。

答案 2 :(得分:2)

您可以使用array_filter:

$results = json_decode($returned_JSON_string);
$item = array_filter ($results, function($item) { $item['id'] == 2; });

答案 3 :(得分:1)

以下是在javascript中执行此操作的解决方案

function myIndexOf(arr, o) {    
        for (var i = 0; i < arr.length; i++) {
            if (arr[i].id == o) {
                return i;
            }
        }
        return -1;
    }
    var data = [{id:1, name:"blue"},{id:2, name:"green"}];

    alert(data[myIndexOf(data,2)].name);

PHP版

    function myIndexOf($arr, o) {    
            for (var i = 0; i < count(arr); i++) {
                if ($arr[i]['id'] == o) {
                    return i;
                }
            }
            return -1;
        }

$data = json_decode($json_data);
echo $data[myIndexOf($data, 2)]['name']; // will output 'green'