Я знаю, что это старый вопрос, но Google все еще нравится его для поиска, который я недавно сделал, поэтому я опубликую свои выводы. Есть два способа сделать это, которые приближаются к тому, что вы пытаетесь, оба полагаться на одну и ту же общую идею.
Идея 1:
Вместо того, чтобы возвращать пару ключ => значение, мы возвращаем массив только с одним элементом «ключ => значение» для каждого последовательного элемента исходных массивов. Затем мы уменьшаем эти массивы, сливаясь на каждом шагу.
$array = array_map(
function($a, $b){
return array($a => $b);
},
$arr1,
$arr2
);
$array = array_reduce(
$array,
function($carry, $element){
$carry = array_merge($carry, $element);
return $carry;
},
array()
);
OR
Идея 2:
Аналогично первой идее, но мы выполняем присвоение ключа => значения в array_reduce. Мы передаем NULL в array_map, который создает массив массивов (http://php.net/manual/en/function.array-map.php)
$array = array_map(NULL, $a, $b);
$array = array_reduce(
$array,
function($carry, $element){
$carry[$element[0]] = $element[1];
return $carry;
},
array()
);
Лично я нахожу, что Идея 2 намного более элегантна, чем Идея 1, хотя для этого необходимо знать, что передача NULL в качестве функции array_map создает массив массивов и, следовательно, несколько не интуитивен. Я просто думаю об этом как о предвестнике array_reduce, где происходит все дело.
Идея 3:
$carry = array();
$uselessArray = array_map(
function($a, $b) use ($carry){
$carry[$a] = $b;
},
$a,
$b
);
Идея 3 является альтернативой Идеи 2, но я думаю, что она более хакерская, чем Идея 2. Мы должны использовать «использование», чтобы выпрыгнуть из области действия функции, что довольно уродливо и, вероятно, противоречит функциональному стилю, который искал ОП .
Давайте немного упростим Idea 2 и посмотрим, как это выглядит:
Идея 2 (б):
$array = array_reduce(
array_map(NULL, $a, $b),
function($carry, $element){
$carry[$element[0]] = $element[1];
return $carry;
},
array()
);
Да, это мило.