使用 PHP Json 对传入数据进行分段

问题描述

传入json数据的形式:

{
  "statusCode": 200,"message": "success","result": [
    {
      "longitude": -87.06687,"start_location_latitude": 20.63589,"start_location_longitude": -87.06687,"end_location_latitude": 20.63589,"end_location_longitude": -87.06687,"highlights": [
        {
          "title": "Oh Yes...Mezcal Shots","url": "https://phoenix-cdn.azureedge.net/phoenix-blob-public-exps/1396_Mezcal_Shot.jpg"
        },{
          "title": "Playa Del Carmen Beachfront","url": "https://phoenix-cdn.azureedge.net/phoenix-blob-public-exps/1396_Playa_Del_Carmen-Beach_Punta_Esmeralda.jpg"
        },{
          "title": "Visit the Market","url": "https://phoenix-cdn.azureedge.net/phoenix-blob-public-exps/1396_Playa_Del_Carmen.jpg"
        }
      ]
    }
  ]
}

此传入数据合并为一行。

https://phoenix-cdn.azureedge.net/phoenix-blob-public-exps/1396_Mezcal_Shot.jpghttps://phoenix-cdn.azureedge.net/phoenix-blob-public-exps/1396_Playa_Del_Carmen-Beach_Punta_Esmeralda.jpghttps://phoenix-cdn.azureedge.net/phoenix-blob-public-exps/1396_Playa_Del_Carmen.jpg

但是我想要做的是获取这些数据中的前 4 个,例如,将它们放入单独的变量中并使用它们。然而,我从来没能做到这一点。

我的代码

foreach($UnlockData as $highlights)
{
    foreach($highlights as $SingleImage)
    {
        if(strlen($SingleImage['url']) > 3) {
            echo $SingleImage['url'];
        }
    }
}

解决方法

这将返回 result 中每个条目的前 4 个亮点。我使用 json 对象 vs 数组,因为我发现将它用作对象可以更容易阅读代码。

<?php
$json = json_decode($incomingJSON);
foreach ($json->result as $result) {
  $ctr = 0 ;
  foreach($result->highlights as $highlight) {
    if (strlen($highlight->url) < 5) continue;

    echo "<P>" . $highlight->title. " - " . $highlight->url;

    $ctr ++;
    if ($ctr>3) break;
  }
}
,

如果只有一个 result,那么只需从 url 中获取所有 highlights(不清楚为什么 strlen):

$urls = array_column($array['result'][0]['highlights'],'url');

foreach($urls as $url) {
    if(strlen($url) > 3) {
        echo $url;
    }
}

如果有多个 result,则获取所有 highlights,然后从中获取所有 url

$urls = array_column(array_column($array['result'],'highlights'),'url']);