array_walk не работает должным образом при изменении значений - PullRequest
1 голос
/ 29 мая 2020

Я пытаюсь добавить новое значение в массив (я знаю, что это возможно с помощью array_map(), но я хотел бы протестировать его с помощью array_walk()).

Это код:

$array = [
    [
        'id'   => 1,
        'name' => 'Jesus',
    ],
    [
        'id'   => 2,
        'name' => 'David',
    ],
];

И мне нужен этот результат:

$array = [
    [
        'id'     => 1,
        'name'   => 'Jesus',
        'locked' => 0,
    ],
    [
        'id'     => 2,
        'name'   => 'David',
        'locked' => 0,
    ],
];

Я пробовал использовать следующий код:

array_walk($array, static function(array $item): array {
    $item += ['locked' => 0];
    //var_dump($item); // Here the array has the three values.
    return $item;
});

// Also I tried the same code but not returning the array, I mean:

array_walk($array, static function(array $item): void {
    $item += ['locked' => 0];
    //var_dump($item); // Here the array has the three values.
});

Возможно ли то, что я хочу, с array_walk() ?


Это было бы решение с array_map().

$arrayMapped = array_map(static function(array $item): array {
    return $item += ['locked' => 0];
}, $array);

var_dump($arrayMapped);

Ура!

1 Ответ

3 голосов
/ 29 мая 2020

Массивы передаются по значению. Вам необходимо определить аргумент по ссылке, используя &

array_walk($array, function(array &$item): void {
    $item['locked'] = 0;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...