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