【问题标题】:Finding item in a JSON Array using PHP使用 PHP 在 JSON 数组中查找项目
【发布时间】:2013-06-06 17:23:57
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您可以遍历数组并查找 ID=2 的项目
  • id:2 会一直排在第二位吗?如果是这样,您可以这样做echo $json[1]['name']
  • 没有@Sean,我把它改得更清楚(我做错了@sean 吗?)
  • 好读 @Baba,当我有一个更大的项目时,我会记住这一点。我认为这有点矫枉过正:)

标签: php json


【解决方案1】:

您的解决方案最好的方法。比如:

$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);

【讨论】:

  • 这样可以吗? (它有效,但我必须在数字前面添加“id”才能这样做。我不是 PHP 专业人士。)$Obj = new stdClass(); foreach ($jobs as $item) { $key = 'id'.$item['id']; $Obj->$key = $item; } print_r($Obj->id12);
  • 如果您绝对知道 ID 12 存在,它会起作用,但我会采用更安全的方法并按照我的建议进行循环。这样,您可以使用特定的 ID(2,在我的示例中为 12 在您的 ID 中)执行您需要执行的任何操作,其中我评论了 // Match!
【解决方案2】:

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

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

现在你可以调用它了

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

或在数组中循环。

【讨论】:

  • 只有在 id 为 1,2,3 时才有效?我将示例固定得更清楚,id 是非常随机的,如果我可以说 id 应该是关联数组的键,那就太好了
【解决方案3】:

你可以使用 array_filter:

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

【讨论】:

  • (这不是对 dave 答案的正确性或适当性的评论,这是一个很好的答案。)我总是觉得这些匿名函数解决方案难以阅读。 array_filter、array_map、array_reduce 都很难从快速阅读中弄清楚发生了什么。 jterry 的(简单)答案更容易阅读。这可能是因为我对函数式编程不太满意,但就这样吧。
【解决方案4】:

这是在 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'

【讨论】:

  • 我的错,我忽略了他想要 PHP 中的解决方案
  • @AbdulHaseeb 如果您要编辑答案,我可以删除反对票。
猜你喜欢
  • 2018-04-06
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多