У меня есть два массива, один с идентификаторами и один с именами:элегантный способ отображения двух массивов друг с другом
$ids = array(4, 13, 6, 8, 10);
$names = array('alice', 'bob', 'charles', 'david', 'elizabeth');
мне нужно обновить БД так, чтобы строки с идентификаторами имеют имена в массиве. Вот хитрая немного: у меня есть два Интс:
$special_name = 2; // the index in $names, in this case we mean 'charles'
$special_id = 13; // the id value
Я не забочусь о том, какое имя идет, к которому идентификатор, за исключением того, что имя с $special_name
должны идти на $special_id
.
Какой самый элегантный способ добраться туда? Все методы, о которых я думаю, кажутся довольно грязными. Лучшее, что я подумал о том, чтобы извлечь из специальных элементов из каждого массива, и сделать сначала, а потом всё остальное, возможно, строить новый массив так:
$mapped = new array();
$mapped[$special_id] = $names[$special_name];
foreach ($ids as $id) {
if ($id != $special_id) {
$mapped[$id] = current($names);
}
// advance $names pointer
$next_name = next($names);
if ($next_name == $special_name) next($names);
}
Я не проверял, что пока (я собираюсь), но это означало, чтобы произвести что-то вроде:
$mapped = array(13=>'charles', 4=>'alice',6=>'bob', 8=>'david', 10=>'elizabeth');
, а затем проходит через что делать фактическое обновление. Получил лучшую идею?
ОБНОВЛЕНИЕ: добавлено возможное решение выше. Между тем есть пара ответов.
Невероятный. Я собирался опубликовать строку для линии точно такого же решения, за исключением подачи 2 аргументов в unset(). creepy lol – goat
@chris даже с теми же именами переменных? Oo: D – Gordon
Я думал об использовании unset, тоже, но array_combine проскользнул мой разум. Это немного лучше. Прохладный, не знал, что вы можете добавить такие массивы. Спасибо. – sprugman