2014-04-02 2 views
0

У меня есть следующие массивыобъединить два массива в один на куски

$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') 
); 

Я хочу, чтобы объединить этот массив в один, но на куски с разницей в 2 что-то вроде

$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') 
); 

Как вы видите, я хотите взять 2 значения из arr1, затем 2 из arr2, и если значение не существует, как в примере $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

http://php.net/manual/en/function.array-merge-recursive.php? –

+0

@MarcB немного здесь, я пробовал http://codepad.org/6fNs7Qwd, но я хочу ключ 4 вместо 1 и так далее. –

ответ

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() должен соответствовать числу параметров, выполняемых вашей функцией обратного вызова.

Второй момент, который следует отметить, заключается в том, что «chunking» добавляет новый уровень в ваш массив, поэтому вам нужно каким-то образом «сгладить» результат объединения двух «chunked» массивов.

+0

Благодаря прояснению логики. Это именно то, чего я хочу. –

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