Попытка зациклить и отобразить файл JSON с помощью PHP

У меня есть файл 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», и прокручивать его, получая поля по имени.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
23
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы также перебираете второй массив 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>";
        }
      }
    }
  }
}

А что с вещами из Clientes? Я хочу видеть, находится ли он на Pessoas или Clientes, и получить их идентификатор и поля.

BrunoJustino 30.05.2019 23:29

Я добавил еще один пример, который использует ваши циклы из вопроса и проверяет, равен ли ключ определенному имени, и только затем выполняет итерацию по содержимому. Вы можете изменить это под свои нужды.

Jan 30.05.2019 23:47

Другие вопросы по теме