【问题标题】:Adding array into another array (not array_push or array_merge)将数组添加到另一个数组(不是 array_push 或 array_merge)
【发布时间】:2018-10-21 09:12:04
【问题描述】:

我对 PHP 还是很陌生,在将数组推送到另一个数组时遇到了一些问题。有关更多详细信息,我想展示我的部分代码:

这是一个示例响应数据:

编辑:我有多个“sentenceArray”

{
  "data": [
    {
      "sentenceArray": [
        {
          "path": {
            "type": "walk",
            "nodes": [
              {
                "lat": 39.952614,
                "lng": 32.854491
              },
              {
                "lat": 39.952083,
                "lng": 32.857761
              }
            ]
          }
        },
        {
          "path": {
            "type": "bus",
            "nodes": [
              {
                "lat": 39.952418,
                "lng": 32.85727
              },
              {
                "lat": 39.952797,
                "lng": 32.856825
              },
              {
                "lat": 39.953102,
                "lng": 32.856438
              }
            ]
          }
        },
        {
          "path": {
            "type": "bus",
            "nodes": [
              {
                "lat": 39.964951,
                "lng": 32.841305
              },
              {
                "lat": 39.964785,
                "lng": 32.841514
              }
            ]
          }
        }
      ]
    },
    {
      "sentenceArray": [
        {
          "path": {
            "type": "walk",
            "nodes": [
              {
                "lat": 39.952614,
                "lng": 32.854491
              },
              {
                "lat": 39.952083,
                "lng": 32.857761
              }
            ]
          }
        },
        {
          "path": {
            "type": "bus",
            "nodes": [
              {
                "lat": 39.952418,
                "lng": 32.85727
              },
              {
                "lat": 39.952797,
                "lng": 32.856825
              },
              {
                "lat": 39.953102,
                "lng": 32.856438
              }
            ]
          }
        },
        {
          "path": {
            "type": "bus",
            "nodes": [
              {
                "lat": 39.964951,
                "lng": 32.841305
              },
              {
                "lat": 39.964785,
                "lng": 32.841514
              }
            ]
          }
        }
      ]
    }
  ]
}

这是我到目前为止所做的:

for($j = 0; $j < $l; $j++) {
        if($sentenceArray[$j]['path']['type'] == "bus") {
            if(isset($sentenceArray[$j]['path']['nodes'])){
                $busCount++;
                $nodes = $sentenceArray[$j]['path']['nodes'];
                for($k = 0, $c = count($nodes); $k < $c; $k++) {
                    $latlng = $nodes[$k];
                    array_push($arrBus,$latlng);
                }

            }
        }
    }

起初,我尝试将数组推送到一个数组中,但我的代码将它们全部合并到一个数组中,而不是将两个单独的数组合并到一个数组中。顺便说一句,真实数据比这大得多,并且是动态生成的。所以总线阵列计数可以是两个或更多。作为一个新手 PHP 开发人员,这对我来说有点令人困惑。

让我告诉你我的目标是什么:

var lineCoordinates = {
  "0": [
    {
                                "lat": 39.952418,
                                "lng": 32.85727
                            },
                            {
                                "lat": 39.952797,
                                "lng": 32.856825
                            },
                            {
                                "lat": 39.953102,
                                "lng": 32.856438
                            }
  ],
  "1": [
    {
                                "lat": 39.964951,
                                "lng": 32.841305
                            },
                            {
                                "lat": 39.964785,
                                "lng": 32.841514
                            }
                            
                           
  ]
}

这个示例输出很适合我。

我自己花了很多时间来做这件事,我也在网上阅读了我的帖子,但找不到解决方案。请不要评判我。正如我所说,我是新手。提前致谢。

顺便说一句,我先提取数据时使用 json_decode(),最后使用 json_encode()。不过我不用提了。

【问题讨论】:

  • 所以你的任务是过滤掉数组类型总线并以对象数组格式表示它?
  • @icecub 我作为前端开发人员工作了很多年。这不是学校作业。我正在使用 Google Maps API 动态绘制折线。这就是为什么我需要这个输出。我用静态数据进行了测试,前端现​​在运行良好。但我也需要编写 PHP 代码,但我没有太多经验。 array_push() 将所有数据合二为一。像这样: [{ "lat": 39.955744,"lng": 32.85303},{"lat": 39.956395,"lng": 32.852171},{"lat": 39.955744,"lng": 32.85303},{"lat" : 39.956395,“lng”: 32.852171}] 使用此数据,我无法在地图上绘制单独的折线。
  • @sumit 没错

标签: php arrays json associative-array


【解决方案1】:

迭代data 子数组,然后迭代sentenceArray,然后如果['path']['type'] 值为bus 并且存在['path']['nodes'] 子数组,则将该子数组作为单独的组存储在结果数组中。

代码:(Demo)

$array = json_decode($json, true);
foreach ($array['data'] as $datas) {
    foreach ($datas['sentenceArray'] as $subitem) {
        if ($subitem['path']['type'] == 'bus' && isset($subitem['path']['nodes'])) {
            $result[] = $subitem['path']['nodes'];
        }
    }
}
echo json_encode($result);

输出:

[[{"lat":39.952418,"lng":32.85727},{"lat":39.952797,"lng":32.856825},{"lat":39.953102,"lng":32.856438}],[{"lat":39.964951,"lng":32.841305},{"lat":39.964785,"lng":32.841514}],[{"lat":39.952418,"lng":32.85727},{"lat":39.952797,"lng":32.856825},{"lat":39.953102,"lng":32.856438}],[{"lat":39.964951,"lng":32.841305},{"lat":39.964785,"lng":32.841514}]]

这也适用于您提供的完整 json 输入字符串:

[[{"lat":39.952418,"lng":32.85727},{"lat":39.952797,"lng":32.856825},{"lat":39.953102,"lng":32.856438},{"lat":39.953273,"lng":32.856239},{"lat":39.953713,"lng":32.855659},{"lat":39.954017,"lng":32.855296},{"lat":39.95498,"lng":32.854037},{"lat":39.955138,"lng":32.853829},{"lat":39.955317,"lng":32.853592},{"lat":39.955448,"lng":32.853421},{"lat":39.955638,"lng":32.853161},{"lat":39.955744,"lng":32.85303},{"lat":39.956395,"lng":32.852171},{"lat":39.957293,"lng":32.851087},{"lat":39.957668,"lng":32.850631},{"lat":39.957715,"lng":32.850579},{"lat":39.957854,"lng":32.850421},{"lat":39.957963,"lng":32.850286},{"lat":39.959664,"lng":32.848184},{"lat":39.960768,"lng":32.846954},{"lat":39.961228,"lng":32.846328},{"lat":39.961566,"lng":32.845869},{"lat":39.962472,"lng":32.844696},{"lat":39.963265,"lng":32.843721},{"lat":39.963397,"lng":32.84357},{"lat":39.963511,"lng":32.843414},{"lat":39.963628,"lng":32.843271},{"lat":39.963804,"lng":32.843048},{"lat":39.963898,"lng":32.842929},{"lat":39.965452,"lng":32.840996}],[{"lat":39.964951,"lng":32.841305},{"lat":39.964785,"lng":32.841514},{"lat":39.964555,"lng":32.841818},{"lat":39.963827,"lng":32.842688},{"lat":39.963622,"lng":32.842942},{"lat":39.963542,"lng":32.843037},{"lat":39.96343,"lng":32.843185},{"lat":39.963304,"lng":32.843335},{"lat":39.962502,"lng":32.844327},{"lat":39.961437,"lng":32.845665},{"lat":39.961162,"lng":32.84601},{"lat":39.961054,"lng":32.84613},{"lat":39.960679,"lng":32.846639},{"lat":39.960299,"lng":32.84711},{"lat":39.959572,"lng":32.848031},{"lat":39.959476,"lng":32.848146},{"lat":39.957918,"lng":32.85016},{"lat":39.957835,"lng":32.850267},{"lat":39.957696,"lng":32.850436},{"lat":39.957636,"lng":32.850509},{"lat":39.957244,"lng":32.850993},{"lat":39.95635,"lng":32.852096},{"lat":39.955658,"lng":32.852909},{"lat":39.954229,"lng":32.854682},{"lat":39.953853,"lng":32.855119},{"lat":39.953422,"lng":32.85567},{"lat":39.953096,"lng":32.856053},{"lat":39.952949,"lng":32.856252},{"lat":39.952406,"lng":32.856964},{"lat":39.952278,"lng":32.857091},{"lat":39.951554,"lng":32.857753},{"lat":39.951114,"lng":32.857934},{"lat":39.950962,"lng":32.857907},{"lat":39.950826,"lng":32.857881},{"lat":39.950556,"lng":32.857782},{"lat":39.94987,"lng":32.857458},{"lat":39.948744,"lng":32.856459},{"lat":39.948303,"lng":32.856178},{"lat":39.947866,"lng":32.855815},{"lat":39.947623,"lng":32.855625},{"lat":39.947283,"lng":32.855428},{"lat":39.946974,"lng":32.855249},{"lat":39.946209,"lng":32.854963},{"lat":39.945342,"lng":32.854679},{"lat":39.945094,"lng":32.85462},{"lat":39.944673,"lng":32.854562},{"lat":39.944124,"lng":32.854557},{"lat":39.943877,"lng":32.854564},{"lat":39.943572,"lng":32.854576},{"lat":39.943336,"lng":32.854503},{"lat":39.943041,"lng":32.854494},{"lat":39.942475,"lng":32.854465},{"lat":39.942371,"lng":32.85444},{"lat":39.942294,"lng":32.854403},{"lat":39.94201,"lng":32.854252},{"lat":39.941672,"lng":32.854101},{"lat":39.941495,"lng":32.854233},{"lat":39.940512,"lng":32.854229}],[{"lat":39.952418,"lng":32.85727},{"lat":39.952797,"lng":32.856825},{"lat":39.953102,"lng":32.856438},{"lat":39.953273,"lng":32.856239},{"lat":39.953713,"lng":32.855659},{"lat":39.954017,"lng":32.855296},{"lat":39.95498,"lng":32.854037},{"lat":39.955138,"lng":32.853829},{"lat":39.955317,"lng":32.853592},{"lat":39.955448,"lng":32.853421},{"lat":39.955638,"lng":32.853161},{"lat":39.955744,"lng":32.85303},{"lat":39.956395,"lng":32.852171},{"lat":39.957293,"lng":32.851087},{"lat":39.957668,"lng":32.850631},{"lat":39.957715,"lng":32.850579},{"lat":39.957854,"lng":32.850421},{"lat":39.957963,"lng":32.850286},{"lat":39.959664,"lng":32.848184},{"lat":39.960768,"lng":32.846954},{"lat":39.961228,"lng":32.846328},{"lat":39.961566,"lng":32.845869},{"lat":39.962472,"lng":32.844696},{"lat":39.963265,"lng":32.843721},{"lat":39.963397,"lng":32.84357},{"lat":39.963511,"lng":32.843414},{"lat":39.963628,"lng":32.843271},{"lat":39.963804,"lng":32.843048},{"lat":39.963898,"lng":32.842929},{"lat":39.965452,"lng":32.840996}],[{"lat":39.964951,"lng":32.841305},{"lat":39.964785,"lng":32.841514},{"lat":39.964555,"lng":32.841818},{"lat":39.963827,"lng":32.842688},{"lat":39.963622,"lng":32.842942},{"lat":39.963542,"lng":32.843037},{"lat":39.96343,"lng":32.843185},{"lat":39.963304,"lng":32.843335},{"lat":39.962502,"lng":32.844327},{"lat":39.961437,"lng":32.845665},{"lat":39.961162,"lng":32.84601},{"lat":39.961054,"lng":32.84613},{"lat":39.960679,"lng":32.846639},{"lat":39.960299,"lng":32.84711},{"lat":39.959572,"lng":32.848031},{"lat":39.959476,"lng":32.848146},{"lat":39.957918,"lng":32.85016},{"lat":39.957835,"lng":32.850267},{"lat":39.957696,"lng":32.850436},{"lat":39.957636,"lng":32.850509},{"lat":39.957244,"lng":32.850993},{"lat":39.95635,"lng":32.852096},{"lat":39.955658,"lng":32.852909},{"lat":39.954229,"lng":32.854682},{"lat":39.953422,"lng":32.85567},{"lat":39.953096,"lng":32.856053},{"lat":39.952949,"lng":32.856252},{"lat":39.952406,"lng":32.856964},{"lat":39.952278,"lng":32.857091},{"lat":39.951554,"lng":32.857753},{"lat":39.951114,"lng":32.857934},{"lat":39.950962,"lng":32.857907},{"lat":39.950826,"lng":32.857881},{"lat":39.950556,"lng":32.857782},{"lat":39.94987,"lng":32.857458},{"lat":39.948744,"lng":32.856459},{"lat":39.948303,"lng":32.856178},{"lat":39.947866,"lng":32.855815},{"lat":39.947623,"lng":32.855625},{"lat":39.947283,"lng":32.855428},{"lat":39.947283,"lng":32.855428},{"lat":39.946974,"lng":32.855249},{"lat":39.946209,"lng":32.854963},{"lat":39.945342,"lng":32.854679},{"lat":39.945094,"lng":32.85462},{"lat":39.944673,"lng":32.854562},{"lat":39.944124,"lng":32.854557},{"lat":39.943877,"lng":32.854564},{"lat":39.943572,"lng":32.854576},{"lat":39.943336,"lng":32.854503},{"lat":39.943041,"lng":32.854494},{"lat":39.942475,"lng":32.854465},{"lat":39.942371,"lng":32.85444},{"lat":39.942294,"lng":32.854403},{"lat":39.94201,"lng":32.854252},{"lat":39.941672,"lng":32.854101},{"lat":39.941495,"lng":32.854233},{"lat":39.940512,"lng":32.854229}],[{"lat":39.952418,"lng":32.85727},{"lat":39.952797,"lng":32.856825},{"lat":39.953102,"lng":32.856438},{"lat":39.953273,"lng":32.856239},{"lat":39.953713,"lng":32.855659},{"lat":39.954017,"lng":32.855296},{"lat":39.95498,"lng":32.854037},{"lat":39.955138,"lng":32.853829},{"lat":39.955317,"lng":32.853592},{"lat":39.955448,"lng":32.853421},{"lat":39.955638,"lng":32.853161},{"lat":39.955744,"lng":32.85303},{"lat":39.956395,"lng":32.852171},{"lat":39.957293,"lng":32.851087},{"lat":39.957668,"lng":32.850631},{"lat":39.957715,"lng":32.850579},{"lat":39.957854,"lng":32.850421},{"lat":39.957963,"lng":32.850286},{"lat":39.959664,"lng":32.848184},{"lat":39.960768,"lng":32.846954},{"lat":39.961228,"lng":32.846328},{"lat":39.961566,"lng":32.845869},{"lat":39.962472,"lng":32.844696},{"lat":39.963265,"lng":32.843721},{"lat":39.963397,"lng":32.84357},{"lat":39.963511,"lng":32.843414},{"lat":39.963628,"lng":32.843271},{"lat":39.963804,"lng":32.843048},{"lat":39.963898,"lng":32.842929},{"lat":39.965452,"lng":32.840996}],[{"lat":39.964951,"lng":32.841305},{"lat":39.964785,"lng":32.841514},{"lat":39.964555,"lng":32.841818},{"lat":39.963827,"lng":32.842688},{"lat":39.963622,"lng":32.842942},{"lat":39.963542,"lng":32.843037},{"lat":39.96343,"lng":32.843185},{"lat":39.963304,"lng":32.843335},{"lat":39.962502,"lng":32.844327},{"lat":39.961437,"lng":32.845665},{"lat":39.961162,"lng":32.84601},{"lat":39.961054,"lng":32.84613},{"lat":39.960679,"lng":32.846639},{"lat":39.960299,"lng":32.84711},{"lat":39.959572,"lng":32.848031},{"lat":39.959476,"lng":32.848146},{"lat":39.957918,"lng":32.85016},{"lat":39.957835,"lng":32.850267},{"lat":39.957696,"lng":32.850436},{"lat":39.957636,"lng":32.850509},{"lat":39.957244,"lng":32.850993},{"lat":39.95635,"lng":32.852096},{"lat":39.955658,"lng":32.852909},{"lat":39.954229,"lng":32.854682},{"lat":39.953853,"lng":32.855119},{"lat":39.953422,"lng":32.85567},{"lat":39.953096,"lng":32.856053},{"lat":39.952949,"lng":32.856252},{"lat":39.952406,"lng":32.856964},{"lat":39.952278,"lng":32.857091},{"lat":39.951554,"lng":32.857753},{"lat":39.951114,"lng":32.857934},{"lat":39.950962,"lng":32.857907},{"lat":39.950826,"lng":32.857881},{"lat":39.950556,"lng":32.857782},{"lat":39.94987,"lng":32.857458},{"lat":39.948744,"lng":32.856459},{"lat":39.948303,"lng":32.856178},{"lat":39.947866,"lng":32.855815},{"lat":39.947623,"lng":32.855625},{"lat":39.947283,"lng":32.855428},{"lat":39.946974,"lng":32.855249},{"lat":39.946209,"lng":32.854963},{"lat":39.945342,"lng":32.854679},{"lat":39.945094,"lng":32.85462},{"lat":39.944673,"lng":32.854562},{"lat":39.944124,"lng":32.854557},{"lat":39.943877,"lng":32.854564},{"lat":39.943572,"lng":32.854576},{"lat":39.943336,"lng":32.854503},{"lat":39.943041,"lng":32.854494},{"lat":39.942475,"lng":32.854465},{"lat":39.942371,"lng":32.85444},{"lat":39.942294,"lng":32.854403},{"lat":39.94201,"lng":32.854252},{"lat":39.941672,"lng":32.854101},{"lat":39.941495,"lng":32.854233},{"lat":39.940512,"lng":32.854229}],[{"lat":39.952418,"lng":32.85727},{"lat":39.952797,"lng":32.856825},{"lat":39.953102,"lng":32.856438},{"lat":39.953273,"lng":32.856239},{"lat":39.953713,"lng":32.855659},{"lat":39.954017,"lng":32.855296},{"lat":39.95498,"lng":32.854037},{"lat":39.955138,"lng":32.853829},{"lat":39.955317,"lng":32.853592},{"lat":39.955448,"lng":32.853421},{"lat":39.955638,"lng":32.853161},{"lat":39.955744,"lng":32.85303},{"lat":39.956395,"lng":32.852171},{"lat":39.957293,"lng":32.851087},{"lat":39.957668,"lng":32.850631},{"lat":39.957715,"lng":32.850579},{"lat":39.957854,"lng":32.850421},{"lat":39.957963,"lng":32.850286},{"lat":39.959664,"lng":32.848184},{"lat":39.960768,"lng":32.846954},{"lat":39.961228,"lng":32.846328},{"lat":39.961566,"lng":32.845869},{"lat":39.962472,"lng":32.844696},{"lat":39.963265,"lng":32.843721},{"lat":39.963397,"lng":32.84357},{"lat":39.963511,"lng":32.843414},{"lat":39.963628,"lng":32.843271},{"lat":39.963804,"lng":32.843048},{"lat":39.963898,"lng":32.842929},{"lat":39.965452,"lng":32.840996}],[{"lat":39.964951,"lng":32.841305},{"lat":39.964785,"lng":32.841514},{"lat":39.964555,"lng":32.841818},{"lat":39.963827,"lng":32.842688},{"lat":39.963622,"lng":32.842942},{"lat":39.963542,"lng":32.843037},{"lat":39.96343,"lng":32.843185},{"lat":39.963304,"lng":32.843335},{"lat":39.962502,"lng":32.844327},{"lat":39.961437,"lng":32.845665},{"lat":39.961162,"lng":32.84601},{"lat":39.961054,"lng":32.84613},{"lat":39.960679,"lng":32.846639},{"lat":39.960299,"lng":32.84711},{"lat":39.959572,"lng":32.848031},{"lat":39.959476,"lng":32.848146},{"lat":39.957918,"lng":32.85016},{"lat":39.957835,"lng":32.850267},{"lat":39.957696,"lng":32.850436},{"lat":39.957636,"lng":32.850509},{"lat":39.957244,"lng":32.850993},{"lat":39.95635,"lng":32.852096},{"lat":39.955658,"lng":32.852909},{"lat":39.954229,"lng":32.854682},{"lat":39.953853,"lng":32.855119},{"lat":39.953422,"lng":32.85567},{"lat":39.953096,"lng":32.856053},{"lat":39.952949,"lng":32.856252},{"lat":39.952406,"lng":32.856964},{"lat":39.952278,"lng":32.857091},{"lat":39.951554,"lng":32.857753},{"lat":39.951114,"lng":32.857934},{"lat":39.950962,"lng":32.857907},{"lat":39.950826,"lng":32.857881},{"lat":39.950556,"lng":32.857782},{"lat":39.94987,"lng":32.857458},{"lat":39.948744,"lng":32.856459},{"lat":39.948303,"lng":32.856178},{"lat":39.947866,"lng":32.855815},{"lat":39.947623,"lng":32.855625},{"lat":39.947283,"lng":32.855428},{"lat":39.946974,"lng":32.855249},{"lat":39.946209,"lng":32.854963},{"lat":39.945342,"lng":32.854679},{"lat":39.945094,"lng":32.85462},{"lat":39.944673,"lng":32.854562},{"lat":39.944124,"lng":32.854557},{"lat":39.943877,"lng":32.854564},{"lat":39.943572,"lng":32.854576},{"lat":39.943336,"lng":32.854503},{"lat":39.943041,"lng":32.854494},{"lat":39.942475,"lng":32.854465},{"lat":39.942371,"lng":32.85444},{"lat":39.942294,"lng":32.854403},{"lat":39.94201,"lng":32.854252},{"lat":39.941672,"lng":32.854101},{"lat":39.941495,"lng":32.854233},{"lat":39.940512,"lng":32.854229}],[{"lat":39.952418,"lng":32.85727},{"lat":39.952797,"lng":32.856825},{"lat":39.953102,"lng":32.856438},{"lat":39.953273,"lng":32.856239},{"lat":39.953713,"lng":32.855659},{"lat":39.954017,"lng":32.855296},{"lat":39.95498,"lng":32.854037},{"lat":39.955138,"lng":32.853829},{"lat":39.955317,"lng":32.853592},{"lat":39.955448,"lng":32.853421},{"lat":39.955638,"lng":32.853161},{"lat":39.955744,"lng":32.85303},{"lat":39.956395,"lng":32.852171},{"lat":39.957293,"lng":32.851087},{"lat":39.957668,"lng":32.850631},{"lat":39.957715,"lng":32.850579},{"lat":39.957854,"lng":32.850421},{"lat":39.957963,"lng":32.850286},{"lat":39.959664,"lng":32.848184},{"lat":39.960768,"lng":32.846954},{"lat":39.961228,"lng":32.846328},{"lat":39.961566,"lng":32.845869},{"lat":39.962472,"lng":32.844696},{"lat":39.963265,"lng":32.843721},{"lat":39.963397,"lng":32.84357},{"lat":39.963511,"lng":32.843414},{"lat":39.963628,"lng":32.843271},{"lat":39.963804,"lng":32.843048},{"lat":39.963898,"lng":32.842929},{"lat":39.965452,"lng":32.840996}],[{"lat":39.964951,"lng":32.841305},{"lat":39.964785,"lng":32.841514},{"lat":39.964555,"lng":32.841818},{"lat":39.963827,"lng":32.842688},{"lat":39.963622,"lng":32.842942},{"lat":39.963542,"lng":32.843037},{"lat":39.96343,"lng":32.843185},{"lat":39.963304,"lng":32.843335},{"lat":39.962502,"lng":32.844327},{"lat":39.961437,"lng":32.845665},{"lat":39.961162,"lng":32.84601},{"lat":39.961054,"lng":32.84613},{"lat":39.960679,"lng":32.846639},{"lat":39.960299,"lng":32.84711},{"lat":39.959572,"lng":32.848031},{"lat":39.959476,"lng":32.848146},{"lat":39.957918,"lng":32.85016},{"lat":39.957835,"lng":32.850267},{"lat":39.957696,"lng":32.850436},{"lat":39.957636,"lng":32.850509},{"lat":39.957244,"lng":32.850993},{"lat":39.95635,"lng":32.852096},{"lat":39.955658,"lng":32.852909},{"lat":39.954229,"lng":32.854682},{"lat":39.953422,"lng":32.85567},{"lat":39.953096,"lng":32.856053},{"lat":39.952949,"lng":32.856252},{"lat":39.952406,"lng":32.856964},{"lat":39.952278,"lng":32.857091},{"lat":39.951554,"lng":32.857753},{"lat":39.951114,"lng":32.857934},{"lat":39.950962,"lng":32.857907},{"lat":39.950826,"lng":32.857881},{"lat":39.950556,"lng":32.857782},{"lat":39.94987,"lng":32.857458},{"lat":39.948744,"lng":32.856459},{"lat":39.948303,"lng":32.856178},{"lat":39.947866,"lng":32.855815},{"lat":39.947623,"lng":32.855625},{"lat":39.947283,"lng":32.855428},{"lat":39.947283,"lng":32.855428},{"lat":39.946974,"lng":32.855249},{"lat":39.946209,"lng":32.854963},{"lat":39.945342,"lng":32.854679},{"lat":39.945094,"lng":32.85462},{"lat":39.944673,"lng":32.854562},{"lat":39.944124,"lng":32.854557},{"lat":39.943877,"lng":32.854564},{"lat":39.943572,"lng":32.854576},{"lat":39.943336,"lng":32.854503},{"lat":39.943041,"lng":32.854494},{"lat":39.942475,"lng":32.854465},{"lat":39.942371,"lng":32.85444},{"lat":39.942294,"lng":32.854403},{"lat":39.94201,"lng":32.854252},{"lat":39.941672,"lng":32.854101},{"lat":39.941495,"lng":32.854233},{"lat":39.940512,"lng":32.854229}]]

问题扩展

按用户提供的值seq过滤结果:

if (!isset($_GET['seq']) || !ctype_digit($_GET['seq'])){
    echo "Missing/Invalid SEQ value.";
} else {
    $array = json_decode($json, true);
    $result = [];
    $selected_seq = (int)$_GET['seq'];
    foreach ($array['data'] as $seq => $datas) {
        if ($seq === $selected_seq) {
            foreach ($datas['sentenceArray'] as $subitem) {
                if ($subitem['path']['type'] == 'bus' && isset($subitem['path']['nodes'])) {
                    $result[] = $subitem['path']['nodes'];
                }
            }
        }
    }
    echo json_encode($result);
}

【讨论】:

  • 感谢您的回答。如果我的数据结构是这样的:ibb.co/feyXOy 我试图让我的数据更短,以便粘贴到这里,但我忘了提到一个重要的细节。 data[] 中的数组不止一个,可以看一下截图吗?
  • 我的真实数据有点长,stackoverflow 不让我知道将所有代码粘贴到问题中。但是在这里你可以看到jsfiddle.net/6az6f49c顺便说一句非常感谢你的解释,现在我明白了背后的逻辑。
  • 作为提问者,您的责任是隔离和最小化您的问题。这在如何提问页面中进行了描述。请这样做。
  • 你是绝对正确的。对于那个很抱歉。我更新了我的问题和数据。
  • @gimmeonereason 你真的不需要结果子数组上的字符串/引用索引吗?
【解决方案2】:

请按照以下代码:

 for($j = 0; $j < $l; $j++) {
    if($sentenceArray[$j]['path']['type'] == "bus") {
        $childArr = array();
        if(isset($sentenceArray[$j]['path']['nodes'])){
            foreach($sentenceArray[$j]['path']['nodes'] as $nodes)
            {
                array_push($childArr, $nodes);
            }
        }
        $arrBus[$j] = $childArr;
    }
}

$arrBus = array_values($arrBus);
$arrBus = json_encode($arrBus);

输出如下:

 [  
   [  
      {  
         "lat":39.952418,
         "lng":32.85727
      },
      {  
         "lat":39.952797,
         "lng":32.856825
      },
      {  
         "lat":39.953102,
         "lng":32.856438
      }
   ],
   [  
      {  
         "lat":39.964951,
         "lng":32.841305
      },
      {  
         "lat":39.964785,
         "lng":32.841514
      }
   ]
]

【讨论】:

    【解决方案3】:

    此代码将产生您想要的输出(假设$json 包含来自您的第一个 sn-p 的 JSON):

    $arr = json_decode($json);
    $buslines = new stdClass();
    $routenum = 0;
    foreach ($arr->data as $data) {
        foreach ($data->sentenceArray as $route) {
            if (!isset($route->path, $route->path->type, $route->path->nodes)) continue;
            if ($route->path->type != 'bus') continue;
            $buslines->{$routenum} = array();
            foreach ($route->path->nodes as $node) {
                $buslines->{$routenum}[] = $node;
            }
            $routenum++;
        }
    }
    echo json_encode($buslines);
    

    输出:

    {
      "0": [
            {"lat":39.952418,"lng":32.85727},
            {"lat":39.952797,"lng":32.856825},
            {"lat":39.953102,"lng":32.856438}
           ],
      "1": [
            {"lat":39.964951,"lng":32.841305},
            {"lat":39.964785,"lng":32.841514}
           ]
    }
    

    【讨论】:

    • 非常感谢您的时间和精力。我相信你的代码是有效的。但是我试图在我的帖子上缩短我的数据,这就是为什么现在它在“foreach ($arr->data as $data)”这一行上给出一个错误:尝试获取非对象的属性。我真正的数据结构那是:ibb.co/feyXOy。我试图编辑像 foreach ($arr->data[0] as $data) 这样的代码,但它也不起作用。有什么建议吗?
    • 你得到的那个错误意味着$arr 不是一个对象。我假设您使用包含您的 JSON 的任何变量包含了 $arr = json_decode($json); 行?如果是这样,那可能意味着 json_decode 失败,这意味着 JSON 无效。如果你能发布一个真实数据的样本,我相信我可以让这段代码很快工作。
    • 我刚刚在上面运行了我的代码,它运行良好(我在输出中得到了大约 500 个条目)。您可以发布您编写的包含我的代码的 PHP 代码吗?
    • 这包括来自不同答案的代码,不是我的。
    猜你喜欢
    • 2011-05-15
    • 2020-07-02
    • 2017-12-24
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多