Foreach результаты вызова API в php

Я сделал вызов GET через API и получил данные, которые изначально выглядели так:

{"@odata.context":"API-URL-CALL","value":[{"Id":1,"Name":Bill"},{"Id":2,"Name":Ted"}]

Я взял эти данные и изменил их, чтобы они выглядели так:

array("Id"=>1,"Name"=>"Bill","Id"=>2,"Name"=>"Ted");

То, что я пытаюсь сделать, это повторить все это, но до сих пор мне удалось распечатать только второй идентификатор и имя.

Мой код выглядит следующим образом:

<?php
$my_array = array("Id"=>1,"Name"=>"Bill","Id"=>2,"Name"=>"Ted");

foreach($my_array as $key => $value)
{
echo 
"
$key = $value <br>
";
}
?>

Как указано выше, это только распечатывает:

Id = 2
Name = Ted

Я чувствую, что это простое исправление, и я просмотрел много сообщений, но не могу найти подходящее решение для этого. Я пробовал такие вещи, как:

$key = $value[0] <br>

$key = $value[0][Id] <br>

foreach($my_array as $arr)
echo 
"
id = $arr[Id], <br>
name = $arr[Name]
"

foreach($my_array as $arr)
echo 
"
id = $arr[0][Id], <br>
name = $arr[0][Name]
"

Все, что меня когда-либо доставало, это один персонаж или вообще ничего. Как я уже говорил, мне кажется, что это простое исправление, и я что-то упускаю или не добавляю? Любая помощь или совет или даже ссылка на другой пост будут высоко оценены. Спасибо за ваше время :^D

Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
0
0
408
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы должны заключать имена индексов в кавычки.

foreach($my_array as $arr)
  echo '
id = '.$arr['Id'].', <br>
name = '.$arr['Name'].'
  ';

Я пробовал это раньше, и это никогда не работает, в этом случае я получаю результаты:

ProfessionallyInept 18.12.2020 18:55

Идентификатор = , имя = , идентификатор = T, имя = T,

ProfessionallyInept 18.12.2020 18:55
Ответ принят как подходящий

Не уверен, как вы получили свой второй массив из исходного JSON (хотя в формате есть несколько ошибок), но вы объединили массив в один массив с повторяющимися ключами (и в итоге получите только последнее значение).

Если вы попытаетесь

print_r(array("Id"=>1,"Name"=>"Bill","Id"=>2,"Name"=>"Ted"));

Вы увидите, что данные заканчиваются как

Array
(
    [Id] => 2
    [Name] => Ted
)

Чтобы правильно извлечь данные, вам нужно декодировать JSON (исправленный JSON в коде), а затем извлечь данные...

$json = '{
    "@odata.context": "API-URL-CALL",
    "value": [
        {
            "Id": 1,
            "Name": "Bill "
        }, 
        {
            "Id": 2,
            "Name": "Ted"
        }
    ]
}';

$my_array = json_decode($json, true);
foreach ( $my_array['value'] as  $arr) {
    echo "
    id = $arr[Id], <br>
    name = $arr[Name]
    ";
}

Я смотрел на это совершенно неправильно. Спасибо за помощь!

ProfessionallyInept 18.12.2020 19:07

Это происходит потому, что вы определили ассоциативный массив. Этот тип массива использует пары ключ=>значение. В этом типе массива ключи должны быть уникальными.

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

Чтобы решить эту проблему, вы должны использовать массив внутри массива:

$my_array = array(array("Id"=>1,"Name"=>"Bill"),array("Id"=>2,"Name"=>"Ted"));

foreach($my_array as $array)
{
   echo "{$array['Id']} = {$array['Name']} <br>";
}

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