Загрузка данных в массивы, хранящиеся в другом массиве - PullRequest
2 голосов
/ 03 октября 2019

Как я могу добавить значения в массив, который содержится в другом массиве?

В приведенном ниже примере кода я пытаюсь добавить строку 'yellow' в оба массива, хранящихся в $arrдля формирования [ [ 'blue',yellow'] , ['green','yellow'] ]

В первом цикле foreach слово yellow было успешно помещено в содержащийся массив, который можно увидеть, когда я распечатываю массив $ key, однако

, когда я былчтобы напечатать $ arr в последнем цикле foreach добавленный мною желтый пропал


    $arr = array(array("blue"),array("green"));

    foreach ($arr as $key)
    {
        array_push($key,"yellow");
        print_r($key);
    }
    foreach ($arr as $key)
    {
        print_r($key);
    }

    ?>

Ответы [ 3 ]

3 голосов
/ 03 октября 2019

Используйте ссылку на ваш foreach, например, так: & $ key , чтобы сохранить вашу модификацию:

PHP делает копию переменной в foreach, поэтому ваш $ ключ на самом деле не совпадает с предыдущим массивом.

From @ Dharman :

и передает значение массива в качестве ссылки ине создает новый экземпляр переменной.

Так что просто сделайте:

$arr = array(array("blue"),array("green"));

foreach ($arr as &$value)
{
    $value[]='yellow';
    print_r($value);
}
foreach ($arr as $value)
{
    print_r($value);
}
2 голосов
/ 03 октября 2019

Здесь foreach без ключевого подхода

$arr = [["blue"], ["green"]];
foreach ($arr as &$value)
       $value[]='yellow';        
print_r($arr);

Здесь foreach с ключевым подходом

$arr = [["blue"], ["green"]];
foreach ($arr as $key=>$value)
       $arr[$key][]='yellow';        
print_r($arr);

Вот еще один подход, использующий array_walk

$arr = [["blue"], ["green"]];
array_walk($arr, function(&$item) {
    $item[] = "yellow";
});
print_r($arr);

Здесь то же самое с array_map

$arr = [["blue"], ["green"]];
$arr = array_map(function($item) {
    $item[] = "yellow";
    return $item;
}, $arr);
print_r($arr);

Вывод для всех примеров

Array
(
    [0] => Array
        (
            [0] => blue
            [1] => yellow
        )

    [1] => Array
        (
            [0] => green
            [1] => yellow
        )

)

И, наконец, некоторые тесты производительности скорость и memory_usage

0 голосов
/ 03 октября 2019

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

$a = [["blue"],["green"]];

$b = array_map(function($n) {
    $n[] = "Yellow";
    return $n;
}, $a);

print_r($b);

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...