2012-02-11 59 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 2012-02-11 22:46:38

回答

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 2012-02-11 23:06:21

3

好的。下面的功能应该得到你想要为:

$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 2012-02-11 23:05:59