У меня есть два массива, один с идентификаторами и один с именами:
$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');
, а затем выполняется через это, чтобы сделать фактическое обновление. Есть идея получше?
ОБНОВЛЕНИЕ: добавлено возможное решение выше. Тем временем пришло несколько ответов.