2012-02-11 27 views
1

を形成するためにPHPの配列をマージI持って、次の二つの配列:多次元配列

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

名前でキーされた一時配列には、最初の2つの配列の値が格納されます。一時的な配列は、最終的な配列にコピーされ、数値キー:

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

) 

注:あなたは出力配列をキーしていると、OKなら、それは数値的に厳密に必要とされていないことを確認するために配列をコピーする最後のステップを名前で。その場合、$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