2013-07-31 4 views
3

я следующие два Массивы:PHP объединение двух массивов под совместным ключом

$Array1 = array(array('x1','x2','x3'),array('x4','x5','x6')); 
$Array2 = array(array('z1','z2','z3'),array('z4','z5','z6')); 

при печати они возвращаются:

Array 
(
    [0] => Array 
     (
      [x1] => x1 
      [x2] => x2 
      [x3] => x3 
     ) 

    [1] => Array 
     (
      [x4] => x4 
      [x5] => x5 
      [x6] => x6 
     ) 

) 

Array 
(
    [0] => Array 
     (
      [z1] => z1 
      [z2] => z2 
      [z3] => z3 
     ) 

    [1] => Array 
     (
      [z4] => z4 
      [z5] => z5 
      [z6] => z6 
     ) 

) 

Как я могу объединить их, чтобы создать единый массив как пример ниже, где они объединяются с помощью того же ключа:

Array 
(
    [0] => Array 
     (
      [x1] => x1 
      [x2] => x2 
      [x3] => x3 
      [z1] => z1 
      [z2] => z2 
      [z3] => z3 
     ) 

    [1] => Array 
     (
      [x4] => x4 
      [x5] => x5 
      [x6] => x6 
      [z1] => z4 
      [z2] => z5 
      [z3] => z6 
     ) 

) 

Я попытался с помощью:

array_merge=($Array1,$Array2) 

array_merge_recursive($Array1,$Array2) 

array_combine($Array1,$Array2) [which genereated an error, so I guess I was using it wrong] 

$ Array1 + $ array2

, но ни один из них не работал.

ответ

2

Вы должны иметь в виду, что вы используете тыс ese на многомерных массивах. Вы были на правильном пути с array_merge, но вы должны позвонить, что на втором уровне вас массивов, и вы должны будете перебирать первый уровень

Так вызова array_merge на каждом втором элементе уровня в этих массивах должны работать:

$Array1 = array(array('x1','x2','x3'),array('x4','x5','x6')); 
$Array2 = array(array('z1','z2','z3'),array('z4','z5','z6')); 
$output = array(); 

foreach ($Array1 as $key=>$value) { 
    $output[$key] = array_merge($value, $Array2[$key]); 
    // same as: 
    //$output[$key] = array_merge($Array1[$key], $Array2[$key]); 
} 

И вы будете иметь конечное значение в $ выходе

+0

спасибо что я рад видеть, что я не был слишком далеко. – IGGt

+0

приветствую вас, я рад, что это помогает – mishu

5

Что-то, как это должно работать:

$output = array(); 
foreach ($Array1 as $key => $arr) { 
    $output[] = array_merge($arr, $Array2[$key]); 
} 
1

попробовать

$Array1 = array_merge(array('x1','x2','x3'),array('x4','x5','x6')); 
$Array2 = array_merge(array('z1','z2','z3'),array('z4','z5','z6')); 

$Array = array_merge($Array1,$Array2) 

docs here

1

попробовать этот

$arr1 = array_merge($Array1[0],$Array2[0]); 
$arr2 = array_merge($Array1[1],$Array2[1]); 
$array = array($arr1, $arr2); 
+0

У вас есть несколько синтаксических ошибок ... 'array_merge = (' – naththedeveloper

+0

да жаль, что я не проверял, но логика была хороша – Freelancer

1

Это работает, даже если у вас нет числовых индексов:

$Array1 = array(array('x1','x2','x3'),array('x4','x5','x6')); 
$Array2 = array(array('z1','z2','z3'),array('z4','z5','z6')); 

$new_array = array(); 

foreach($Array1 as $key => $val) { 
    if(array_key_exists($key, $Array2)) { 
     $new_array[$key] = array_merge($val, $Array2[$key]); 
    } 
} 

echo '<pre>'; 
print_r($new_array); 
echo '</pre>'; 
0

Попробуйте это.

<?php 
$Array1 = array(array('x1' => 'x1', 'x2' => 'x2', 'x3' => 'x3'), 
    array('x4' =>'x4','x5' =>'x5','x6' =>'x6')); 


$Array2 = array(array('z1' =>'z1', 'z2' =>'z2', 'z3' =>'z3'), 
array('z4' =>'z4','z5' =>'z5', 'z6' =>'z6')); 


$final=array(); 
foreach($Array1 as $key1=>$arr1) 
{ 
foreach($Array2 as $key2=>$arr2) 
    { 
    if($key1==$key2) 
    { 
     $sub=array_merge($arr1,$arr2); 
     $final[]=$sub; 
    } 
    } 
} 

echo '<pre>'; 
print_r($final); 
echo '</pre>'; 

?> 

Вы можете chcek рабочую демку здесь (http://codepad.org/1Eu9vjah)

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