Попытка зациклить и отобразить файл JSON с PHP - PullRequest
1 голос
/ 31 мая 2019

У меня есть JSON-файл с массивом внутри.Я хочу зациклить внутри каждого элемента JSON и отобразить его.Я могу успешно сделать это, но я хочу, чтобы при использовании цикла foreach ссылаться на поле следующим образом: $value["pessoa_id"];

Когда я делаю так, я получаю его для отображения, но после отображения он получает сообщение: "Примечание: неопределенный индекс: номер ", как будто он пытался получить к нему доступ снова.

Это файл JSON:

{"Clientes": {
      "Pessoa": [
        {"pessoa_id" : 1,  "nome": "INDUSTRIAL JAVARI LTDA",  "endereco": "ENGENHO SANTA TERESA"},
        {"pessoa_id" : 2,  "nome": "AGROISA-AGRO IND. TRAVESSIA S/A",  "endereco": "FAZENDA TRAVESSIA S/N"}
      ],
      "Clientes": [
        {"cliente_id" : 1,  "loja" : 1,  "cliente" : 1,  "tpcli": "J",  "pontoref": ""},
        {"cliente_id" : 2,  "loja" : 1,  "cliente" : 2,  "tpcli": "J",  "pontoref": ""}
      ]
    }
  }

и код php:

$jsondata = file_get_contents("clitest.json");
$json = json_decode($jsondata, true);
foreach ($json as $key => $value){
    foreach ($value as $key => $val){
      foreach ($val as $key => $v){
          echo $v["nome"] . " " . $v["endereco"];
          echo "<br>";
        }
    }
}

Я хочу иметь возможность в одном foreach увидеть, является ли это "Pessoa" или "Clientes" и обойти его, получив поля по имени.

1 Ответ

2 голосов
/ 31 мая 2019

Вы также перебираете второй массив Clientes.Вы можете получить доступ к массиву напрямую и выполнять итерацию только по этим данным:

$jsondata = file_get_contents("clitest.json");
$json = json_decode($jsondata, true);
$pessoa = $json["Clientes"]["Pessoa"];
foreach ($pessoa as $key => $value){
  echo $value["nome"] . " " . $value["endereco"];
  echo "<br>";
}

Обновление:

Если вам нужно / хотите перебрать весь набор данных, какВы сделали в своем вопросе, вы можете проверить, если вы находитесь в правильном элементе объекта и только затем повторять и выводить данные.

$jsondata = file_get_contents("clitest.json");
$json = json_decode($jsondata, true);
foreach ($json as $key1 => $value){
  if ($key1 == "Clientes") {
    foreach ($value as $key2 => $val){
      if ($key2 == "Pessoa") {
        foreach ($val as $key3 => $v){
          echo $v["nome"] . " " . $v["endereco"];
          echo "<br>";
        }
      }
    }
  }
}

...