更新数组内的数组键

时间:2018-06-09 17:17:18

标签: php laravel

我的目标是能够更新数组内部数组内的键值,我不知道我是否使用了正确的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]
                            ]
                        ]
                    ]));

3 个答案:

答案 0 :(得分:1)

如果您想更新密钥...输入$ array [&#39; new_key&#39;] = $ array [&#39; old_key&#39;]将使用2组密钥复制值。< / p>

这里有几个选项。您可以创建一个新数组,只需设置所需的键或使用array_keys和array_values并混合它们......您的选择

http://php.net/manual/en/ref.array.php

请参阅上面的列表,您可以使用很多数组函数...请参阅上面的两个和array_map ...实际上有很多方法可以做到这一点。查看文档后,了解如何最好地处理问题。

祝你好运!

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

我发现这是一个解决方案。

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


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