简体   繁体   中英

array_walk not working as expected when modifying the values

I am trying to add a new value to the array (I know it is possible with array_map() but I would like to test it with the array_walk() ).

This is the code:

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

And I want this output:

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

I tried with the following code:

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.
});

Is it possible what I want with an array_walk() ?


That would be the solution with an array_map() .

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

var_dump($arrayMapped);

Cheers!

Arrays are passed by value. You need to define the argument by reference using &

array_walk($array, function(array &$item): void {
    $item['locked'] = 0;
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM