首页 > 解决方案 > 更新数组内的数组键

问题描述

我的目标是能够更新数组内部的键值,我不知道我是否使用了正确的 php 数组函数。

前:

array:2 [
    "week_number" => 1
    "games" => array:1 [
        0 => array:3 [
            "game_number" => 1
            "umpires" => []
            "teams" => []  
        ]
    ]
]

后:

array:2 [
    "week_number" => 1
    "games" => array:1 [
        0 => array:3 [
            "game_number" => 1
            "umpires" => []
            "teams" => [1,2]  
        ]
    ]
]

测试类:

private function validParams($overrides = [])
{
    return array_merge_recursive([
        'week_number' => 1,
        'games' => [[
            'game_number' => 1,
            'umpires' => [],
            'teams' => [], 
        ]]
    ], $overrides);
}


$response = $this->actingAs($this->authorizedUser)
                    ->post(route('games.store', ['week' => $this->week->id]), $this->validParams([
                        'games' => [][
                            [
                                'teams'  => [1,2]
                            ]
                        ]
                    ]));

标签: phplaravel

解决方案


这是您需要的时刻unset():使用不同的键添加值不会更新或覆盖旧值,而只是添加另一个键值对。因此,添加新值拳头,然后取消设置旧值拳头。我们可以使用 Toarray_walk来遍历数组:

array_walk($array, function (& $item) {
   $item['new_key'] = $item['old_key'];
   unset($item['old_key']);
});

注意&lambda 函数中的引用运算符:它确保我们正在处理原始数组而不是它的副本。


推荐阅读