Как из одномерного массива сделать двумерный с заменой имени (названия) ключа

prostoman

Новичок
Здравствуйте.
Помогите, пожалуйста, решить задачку. Для меня, как для новичка, она немного сложновата...

В контроллере я получаю $request, где находится массив со значениями id пользователей:

$user_id = array:3 [▼
0 => "5"
1 => "6"
2 => "7"
]

В этом массиве может быть от 1 до 5 элементов.

Необходимо разделить этот массив на несколько массивов в зависимости от количества элементов в нем. То есть, сперва мы считаем количество элементов в массиве, а потом делим этот массив на полученное значение.

В результате мы должны получить, такой двумерный массив:

$array = ([
['0'=>'5],
['1'=>'6'],
['2'=>'7'],
]);


Теперь, в полученном массиве $array необходимо заменить ключ в каждом из подмассивов на 'user_id'

В результате мы должны получить, такой массив:

$array = ([
[''user_id'=>'5],
[''user_id'=>'6'],
[''user_id'=>'7'],
]);

Возможно, ничего этого делать бы и не пришлось, если бы я знал как изначально получить в $request двумерный массив из нужных ключ => значение.
Данные я получаю из формы

<label>Select Multiple</label>
<select name="array[]" multiple="" class="form-control">
<option value="{{ $user->id }}">{{ $user->name }}</option>

Может есть способ указать в value не только значение но и ключ?

За ранее благодарю. Отвечу на любые уточняющие вопросы.
 

AmdY

Пью пиво
Команда форума
В программировании лучше не менять входные данные, а формировать новые.
Тебе пришли данные, проитерируй добавляя в новый массив в нужном формате.

п.с. Надеюсь никто не напишет готовый код, а то человек пришёл ни с чём кроме условия.
 

prostoman

Новичок
В программировании лучше не менять входные данные, а формировать новые.
Тебе пришли данные, проитерируй добавляя в новый массив в нужном формате.

п.с. Надеюсь никто не напишет готовый код, а то человек пришёл ни с чём кроме условия.
Подскажите, пожалуйста, как сформировать новые данные на основе полученных или как получить данные в нужном виде?
 

Фанат

oncle terrible
Команда форума
В цикле.
Любые операции над массивами всегда производятся в цикле.
 

prostoman

Новичок
В цикле.
Любые операции над массивами всегда производятся в цикле.
Спасибо, пробую.
Тут мне советуют, что: "В программировании лучше не менять входные данные, а формировать новые. " Как быть в этом случае? Обработка циклом foreach тут наверное будет противоречить?
 

prostoman

Новичок
Исходя из того, что "В программировании лучше не менять входные данные", я так понимаю, что изменение полученного массива в нужный вид для сохранения в БД это не правильная практика и нужно искать другой путь решения?

Может действительно правильно будет создать нужный массив и в него добавить полученные данные. Правда я пока что не знаю как это сделать )
 

AmdY

Пью пиво
Команда форума
нет. ты создаёшь новый массив переменную, затем проходишься в цикле по пришедшим данным и добавляешь данные из него его в новый в нужном формате.
 

prostoman

Новичок
Вот, что у меня вышло:

foreach ($array as $value) {
$array[]['user_id'] = $value;
}

Результат:
dump($array);

array:3 [▼
0 => array:1 [▼
"user_id" => "5"
]
1 => array:1 [▼
"user_id" => "6"
]
2 => array:1 [▼
"user_id" => "7"
]
]

В принципе то, что я и хотел. Подскажите, это правильное решение данной задачи?
 

prostoman

Новичок
Добавил в форму <select name="users[][user_id]" multiple="" class="form-control">и получил в $request нужный массив. Решение, как оказалось, проще простого, но до него пришлось додуматься не так уж и быстро )
 

AnrDaemon

Продвинутый новичок
Вот только вам предлагали создать новую переменную.
И лучше было бы написать
PHP:
foreach($array as $value) {
    $data[] = ['user_id' => $value];
}
 

prostoman

Новичок
Вот только вам предлагали создать новую переменную.
И лучше было бы написать
PHP:
foreach($array as $value) {
    $data[] = ['user_id' => $value];
}
Я создал новую переменную как и предлагали. Но потом, я понял, что данные можно получить в форме в нужном мне виде. Поэтому, скрипт не пригодился.

Спасибо, что ответили!
 

prostoman

Новичок
у него оказалось можно входные данные заменить на фронте.
Именно так! В первом посте я указал, что:

Возможно, ничего этого делать бы и не пришлось, если бы я знал как изначально получить в $request двумерный массив из нужных ключ => значение.

Я пришел за советом, так как пока еще много чего не знаю. Знал бы, не спрашивал.
 
Сверху