Foreach массив возвращает последнее значение

#php

#php

Вопрос:

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

Исключение

         "MerchantDefinedFields":[  
        {  
           "Id":2,
           "Value":"email@test.com"
        },
        {  
           "Id":4,
           "Value":"Web"
        },
        {  
           "Id":9,
           "Value":"NAO"
        },
        {  
           "Id":83,
           "Value":"Field"
        },
        {  
           "Id":84,
           "Value":"Only"
        }
     ]
  

Мой код

             $MDDs = array(
                array("Id" => 2, "Value" => "email@test.com"), 
                array("Id" => 4, "Value" => "Web"),
                array("Id" => 9, "Value" => "NO"),
                array("Id" => 83, "Value" => "Field"),
                array("Id" => 84, "Value" => "Only")
            );
             
            foreach($MDDs as $MDD){
                $abac = array("Id" => $MDD['Id'], "Value" => $MDD['Value']);
            }
  

Результат

     Array
(
    [Id] => 84
    [Value] => PROPRIO
)
  

Комментарии:

1. Разве ваш вывод не совпадает с вводом? Также просто для того, чтобы указать, что вы создаете вложенный массив, а не массив объектов.

Ответ №1:

Ваша foreach() настройка переустанавливается $abac каждый раз, когда она проходит через цикл. Поэтому при последнем запуске он установит переменную на последний элемент в вашем массиве.

Вместо того, чтобы каждый раз устанавливать переменную, попробуйте добавить ключ-> значение в массив (или что-то в этом роде, в зависимости от того, что вы хотите):

 $abac = [];
foreach($MDDs as $MDD){
    $abac[] = array("Id" => $MDD['Id'], "Value" => $MDD['Value']);
}
  

Сложно создать точный правильный ответ для вас, поскольку неясно, чего вы пытаетесь достичь, но это должно, по крайней мере, указать вам правильное направление.

Ответ №2:

Для простого ответа: — Вам не нужен foreach цикл для получения желаемого результата, вы можете просто использовать встроенную функцию php для преобразования вашего массива в JSON

$abac = json_encode ( $MDDs);

Теперь перейдем к вашей проблеме :-

вы переназначаете $abac переменную в цикле вместо того, чтобы добавлять к ней подобные значения.

 $abac = [];
foreach($MDDs as $MDD){
    $abac[] = array("Id" => $MDD['Id'], "Value" => $MDD['Value']);
}
  

Ответ №3:

Лучший способ сделать это — объявить $abac вне foreach, а затем использовать метод array_push следующим образом:

 $abac = array();

foreach($MDDs as $MDD)
{
    array_push($abac, array("Id" => $MDD['Id'], "Value" => $MDD['Value']));
}
print_r($abac);