将一个数组添加到另一个数组中(不使用array_push或array_merge)

3
我是一名新手PHP程序员,我在将数组推送到另一个数组时遇到了一些问题。为了更详细地说明,我想展示我的代码的一部分:
这是一个示例响应数据:

edit: I have more than one "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()。但我不需要提到它。


你的任务是过滤掉数组类型的bus并将其表示为对象数组格式? - sumit
@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}]使用这些数据,我无法在地图上绘制分离的折线。 - gimmeonereason
@sumit,没错。 - gimmeonereason
3个回答

2

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

代码: (演示)

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

作为提问者,您的责任是隔离和最小化您的问题。这在“如何提问”页面中有所描述,请遵循该指南。 - mickmackusa
你又是对的,我的错。很抱歉。我需要索引,但它是否为字符串并不重要。我只需要索引。 - gimmeonereason
$_GET['seq'] 没有匹配到任何记录或者 $_GET['seq'] 没有被设置时,您希望出现什么行为? - mickmackusa
如果 $_GET['seq'] 没有匹配任何记录或未设置,那么它并不是很重要。我正在为自己进行概念验证,所以我们可以忽略这种情况。但是请注意,至少会有2个sentenceArray。 - gimmeonereason
好的,几个逻辑行为可以是在序列号缺失/无效时不显示任何记录,或者您可以显示所有记录...这取决于项目。 - mickmackusa
显示剩余13条评论

0
请按照以下代码进行操作:
 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
      }
   ]
]

0
这段代码将产生您所期望的输出(假设$json包含了您第一个片段中的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)”上出现“尝试获取非对象属性”的错误。我的真实数据结构是这样的:https://ibb.co/feyXOy。我尝试编辑代码,例如foreach ($arr->data[0] as $data),但它也无法工作。有什么建议吗? - gimmeonereason
你得到的那个错误意味着$arr不是一个对象。我猜测你使用包含JSON的任何变量来包含$arr = json_decode($json);这一行?如果是这样,那很可能意味着json_decode失败了,这意味着JSON无效。如果你能够发布一些真实数据的样本,我相信我可以很快让这段代码工作起来。 - Nick
我刚刚在那个上运行了我的代码,它完美地工作了(输出大约有500个条目)。你能否发布一下你编写的包含我的代码的PHP代码? - Nick
这包括来自不同答案的代码,而不是我的。 - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接