2009-03-23 3 views
4

У меня есть массив вроде следующегоОбъединение двух массивов (ключ и содержание) в PHP

Array ([0] => "txt1" [1] => "txt2" [2] => "txt3")

у меня есть еще один массив подобного, но с различным содержанием: Array ([0] => на [2] => на)

цель состоит в том, чтобы получить окончательный массив с ключами второй и содержание первого, это как слияние их.

Так что конечный результат: Array ([0] => "txt1" [2] => "txt3"). Лучше изменить ключи на 0 - 1, но это тривиальная проблема, давайте сосредоточиться на их объединении один к одному.

ответ

11

Самый простой способ сделать это - array_intersect_key (See the PHP Docs). Он захватывает значения из первого переданного массива, соответствующего ключам, присутствующим во всех остальных переданных массивах.

Итак, ваш пример будет выглядеть следующим образом:

$a = array(0 => "txt1", 1 => "txt2", 2 => "txt3"); 
$b = array(0 => 1, 2 => 1); 
$c = array_intersect_key($a, $b); 
print_r($c); 

печатает:

Array 
(
    [0] => txt1 
    [2] => txt3 
) 
+0

использовать array_values ​​() для переопределения результирующего массива – soulmerge

+0

Спасибо, это сработало хорошо! : D –

2

array_combine - Создает массив, используя один массив для ключей, а другой для его значений

+0

размеры входных массивов должны быть равны – SilentGhost

+0

А .. Я пропустил это. – troelskn

2

Почему вы не используете прямое решение?

foreach($arr2 as $k=>$v) { 
    $a[$k] = $arr1[$k]; 
} 
+0

Я, как правило, внедряю такие ручные решения, они работают нормально, но вы всегда должны предполагать, что любая нативная функция будет быстрее и, возможно, станет более оптимизированной в будущем, между тем ваш foreach всегда будет оставаться на той же скорости. – TravisO

+0

Я думаю, что если кому-то не удастся получить доступ к документам по какой-то причине, простая реализация - это путь. Разумеется, функция buil-in обеспечивает лучшую производительность, но это своего рода выигрыш, который вы можете получить, если знаете, что встроенный существует. – SilentGhost