【问题标题】:Iterate through json array with multiple results遍历具有多个结果的 json 数组
【发布时间】:2019-02-26 05:12:54
【问题描述】:

我试图弄清楚如何解析具有多个结果的 json 响应。这是响应数据 -

 Array
 (
    [id] => 7181676
    [api_request_id] => 20984853
    [user] => 8305
    [vin] => JTDKN3DU7D1643423
    [make] => Toyota
    [model_name] => Prius
    [model_year] => 2013
    [last_updated] => 2019-02-22T01:08:15.628318Z
    [recall_count] => 2
    [status] => ok
    [recalls] => Array
        (
            [0] => Array
                (
                    [recall_id] => 15753
                    [recall_age] => 0
                    [nhtsa_id] => 18V684000

                )
            [1] => Array
                (
                    [recall_id] => 16733
                    [recall_age] => 1
                    [nhtsa_id] => 16V684123

                )
        )
)

我想循环获取recalls[0]和recalls[1],因为我不知道会有多少结果,所以不能手动完成。

我正在寻找的回应是 -

2013 Toyota Prius

Recall ID - 1573
Recall Age - 0
Nhtsa Id - 18v684000

Recall ID - 16733
Recall Age - 1
Nhtsa Id - 16v684123

我会做这样的事情吗? -

$data = curl_exec($ch);
$responseData = json_decode($data, TRUE);

foreach($responseData as $item){
    echo $item;
}

【问题讨论】:

  • 你可以像echo $item['id'];一样得到它的对应值7181676
  • 是的,谢谢,我知道如何获取单个值,但由于会有未知数量的响应,我想循环遍历每个 $responseDara[recalls][0]、$responseDara[recalls ][1] 等等。
  • 使用is_array()方法解析json数据后,在迭代数组的同时检查数组即可。
  • recall_count 告诉我是否有多个结果,我可以使用它来知道迭代多少次,但不确定如何执行。

标签: php json curl


【解决方案1】:

您可以在数据中循环遍历 recalls 数组;通过使用foreach 循环,您不必担心数组中有多少:

foreach ($responseData['recalls'] as $key => $recall) {
    echo "recall $key:\n";
    echo "recall id: {$recall['recall_id']}\n";
    echo "recall age: {$recall['recall_age']}\n";
    echo "nhtsa id: {$recall['nhtsa_id']}\n\n";
}

输出:

recall 0: 
recall id: 15753
recall age: 0 
nhtsa id: 18V684000 

recall 1: 
recall id: 16733
recall age: 1 
nhtsa id: 16V684123

Demo on 3v4l.org

【讨论】:

  • 这非常有效,伙计! as $key => $recall 通过我接受的数组键打破每次迭代? [0]、[1] 等等..?
  • @RyanD 是的,$keyrecalls 数组中获取数组索引,$recall 获取该元素的内容(本身是另一个具有 3 个元素的数组,recall_id,@ 987654330@和nhtsa_id)
【解决方案2】:

通过for循环遍历数组 例如:

for ($i = 0; $i < count($responseData['recalls']); $i++) {
    $result = $responseData['recalls'][$i];
    echo $result['recall_id'].'<br>';
    echo $result['recall_age'].'<br>';
    echo $result['nhtsa_id'].'<br>';
}

【讨论】:

    猜你喜欢
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多