0

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

API 像这样返回 JSON[{id:31, name:"blue"},{id:22, name:"green"},..]

我想从 id 中获取名称$api->[where id= 2]

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

4

4 回答 4

4

您的解决方案最好的方法。就像是:

$results = json_decode($returned_JSON_string);

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

如果你不喜欢创建 的默认行为json_decodeobject你可以指示它创建一个array这样的:

 $results = json_decode($returned_JSON_string, true);
于 2013-06-06T17:30:18.937 回答
2

你可以使用array_filter:

$results = json_decode($returned_JSON_string);
$item = array_filter ($results, function($item) { $item['id'] == 2; });
于 2013-06-06T17:34:08.090 回答
2

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

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

现在你可以用

echo $arr[1]['id'];

或在数组中循环。

于 2013-06-06T17:30:54.563 回答
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'
于 2013-06-06T17:48:55.210 回答