2012-02-11 2 views
1

У меня есть следующие два массива:Объединение PHP массивы для формирования многомерного массива

Array ([Jonah] => 27 [Bianca] => 32

Array ([Jonah] => 2 [Bianca] => 7

Можно ли объединить их вместе, чтобы сформировать многомерный массив в этом формате?

Array ([0] => Array 
       ([name] => Jonah 
       [age] => 27 
       [number] => 2) 
     [1] => Array 
       ([name] => Bianca 
       [age] => 32 
       [number] => 7) 
    ) 
+1

что вы пробовали? – Cfreak

ответ

3

Временной массив с ключом по имени хранит значения из первых двух массивов. Временный массив копируется в окончательный массив ключом численно:

$arr1 = array ('Jonah' => 27, 'Bianca' => 32); 
$arr2 = array ('Jonah' => 2, 'Bianca' => 7); 

$tmp = array(); 

// Using the first array, create array keys to $tmp based on 
// the name, and holding the age... 
foreach ($arr1 as $name => $age) { 
$tmp[$name] = array('name' => $name, 'age' => $age); 
} 

// Then add the number from the second array 
// to the array identified by $name inside $tmp 
foreach ($arr2 as $name => $num) { 
    $tmp[$name]['number'] = $num; 
} 

// Final array indexed numerically: 
$output = array_values($tmp); 
print_r($output); 

Array 
(
    [0] => Array 
     (
      [name] => Jonah 
      [age] => 27 
      [number] => 2 
     ) 

    [1] => Array 
     (
      [name] => Bianca 
      [age] => 32 
      [number] => 7 
     ) 

) 

Примечание: Последний шаг копирования массива, чтобы сделать его численно не строго необходимо, если вы нормально с вашей выходной массив быть ключом по имени. В этом случае $tmp является конечным продуктом.

+0

Большое спасибо, отлично работает! – user1092780

3

OK. Следующие функции должны получить вы хотите быть:

$people = array ('Jonah' => 27, 'Bianca' => 32); 
$numbers = array ('Jonah' => 2, 'Bianca' => 7); 
$merged = array(); 
$i = 0; 

foreach ($people as $k=>$v) 
{ 
    if (isset($numbers[$k])) 
    { 
     $merged[$i]['name'] = $k; 
     $merged[$i]['age'] = $v; 
     $merged[$i++]['number'] = $numbers[$k]; 
    } 
} 

Теперь, если вы делаете var_dump($merged); вы получите:

array 
    0 => 
    array 
     'name' => string 'Jonah' (length=5) 
     'age' => int 27 
     'number' => int 2 
    1 => 
    array 
     'name' => string 'Bianca' (length=6) 
     'age' => int 32 
     'number' => int 7 
+0

Большое спасибо, отлично работает! – user1092780