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