2016-06-28 3 views
1

Я бы хотел заменить все числовые ключи в $aValues текстовым эквивалентом, хранящимся в $aKeyNames.Обновить все ключи массива, используя значение из другого массива

$aKeyNames = array(0 => 'foo', 1 => 'bar'); 
$aValues = array(0 => 'foo content', 1 => 'bar content'); 

Желаемый результат;

$aValues = array('foo' => 'foo content', 'bar' => 'bar content'); 

Для этого я написал следующий рабочий код;

foreach ($aValues as $iPos => $aValue) { 
    $aValues[ $aKeyNames[$iPos] ] = $aValue; 
    unset($aValues[$iPos]); 
} 

Я обеспокоен тем, что $aValues очень большой. Есть ли более эффективный способ достичь этого?

+2

Ваши решения, кажется, хорошо, так как вы хотите, чтобы заменить ключ на значение одного и того же ключа в другой массив. Вы можете использовать 'array_combine()', но вы должны убедиться, что оба массива отсортированы одинаково, поэтому ключи находятся в одном порядке. – Rizier123

+0

array_combine - лучший способ сделать это, если у вас есть одинаковые ключи в обоих массивах. посмотрите http://php.net/manual/en/function.array-combine.php –

+0

спасибо за комментарии, Ive только что осознал ошибку в том, что я опубликовал, просто работаю над обновленным вопросом – atoms

ответ

2

Обратитесь к руководству по array_combine:

print_r(array_combine($aKeyNames, $aValues)); 
+2

Здесь идет тихий donwvoter. –

+2

Я хотел бы знать, почему это было проголосовано, поскольку он, похоже, делает именно то, что просит ОП? Не полезно просто голосовать без комментариев. –

+1

Мне любопытно, почему это занижено. Единственное различие, которое я вижу, это то, что код OP ограничен двумя массивами, а используемые значения не заданы в цикле. Уменьшить объем памяти? – jeroen

Смежные вопросы