Обновление ключей массива внутри массива - PullRequest
0 голосов
/ 09 июня 2018

Моя цель - иметь возможность обновлять значение ключа внутри массива внутри массива, и я не знаю, использую ли я правильную функцию массива 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 голосов
/ 09 июня 2018

В этот момент вам нужно unset(): Добавление значения с другим ключом не обновит или не перезапишет старое значение, а просто добавит еще одну пару ключ-значение.Следовательно, добавьте новое значение fist, затем сбросьте старое.Мы можем использовать To array_walk для перехода по массиву:

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

Обратите внимание на оператор ссылки & в лямбда-функции: он гарантирует, что мы работаем с исходным массивом, а не с копиейэто.

0 голосов
/ 10 июня 2018

Я нашел это как решение.

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]
        ]
                        ]
    ]));
0 голосов
/ 09 июня 2018

Если вы хотите обновить ключи ... ввод $ array ['new_key'] = $ array ['old_key'] дублирует значение с двумя наборами ключей.

У вас есть несколько вариантовВот.Либо вы создаете новый массив и просто устанавливаете нужные ключи, либо работаете с array_keys и array_values ​​и смешиваете их ... ваш выбор

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

См. Список выше, естьмножество функций массива, которые вы можете использовать ... см. две выше и array_map ... есть практически множество способов сделать это.Посмотрите, как лучше всего решить вашу проблему после просмотра документации.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...