我有以下数组
$arr1 = array(
array('ctype'=>'fr', 'type'=>'fr'),
array('ctype'=>'fasdf', 'type'=>'fr'),
array('ctype'=>'fdfdf', 'type'=>'fr'),
array('ctype'=>'fhjdf', 'type'=>'fr'),
array('ctype'=>'fsf', 'type'=>'fr'),
array('ctype'=>'vndf', 'type'=>'fr'),
array('ctype'=>'fnsdf', 'type'=>'fr')
);
$arr2 = array(
array('ctype'=>'fr', 'type'=>'ln'),
array('ctype'=>'fasdf', 'type'=>'ln'),
array('ctype'=>'fayf', 'type'=>'ln'),
array('ctype'=>'fauf', 'type'=>'ln')
);
我想将这个数组合并为一个,但是将其合并为两个不同的块,例如
$main_arr = array(
array('ctype'=>'fr', 'type'=>'fr'),
array('ctype'=>'fasdf', 'type'=>'fr'),
array('ctype'=>'fr', 'type'=>'ln'),
array('ctype'=>'fasdf', 'type'=>'ln'),
array('ctype'=>'fdfdf', 'type'=>'fr'),
array('ctype'=>'fhjdf', 'type'=>'fr'),
array('ctype'=>'fayf', 'type'=>'ln'),
array('ctype'=>'fauf', 'type'=>'ln')
array('ctype'=>'fsf', 'type'=>'fr'),
array('ctype'=>'vndf', 'type'=>'fr'),
array('ctype'=>'fnsdf', 'type'=>'fr')
);
如您所见,我想从arr1获取2个值,然后从arr2获取2个值,如果值不存在于示例$arr2
中,则从$arr1
获取并推送值。我尝试使用array_chunks
和array_map
,但无法获得预期效果。
这是我试过的:
// Divide foursome into chunks
$fr = array_chunk($arr1, 2);
$ln = array_chunk($arr2, 2);
// Can't provide the expected result
$main = array_map(NULL, $fr, $ln);
答案 0 :(得分:1)
我认为你是在追求这样的事情:
function combine($a1, $a2) {
if (is_array($a2) && count($a2)) {
$a1 = array_merge($a1, $a2);
}
return $a1;
}
$m = array_map('combine', $fr, $ln);
$main = array();
foreach ($m as $idx => $ars) {
$main = array_merge($main, $ars);
}
要注意的第一点是传递给array_map()的数组数必须与回调函数所采用的参数数相匹配。
要注意的第二点是“分块”为您的数组添加了一个新级别,因此您需要某种方法来“压平”组合两个“分块”数组的结果。