Слияние массивов PHP для формирования многомерного массива - PullRequest
1 голос
/ 12 февраля 2012

У меня есть два следующих массива:

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

Ответы [ 2 ]

3 голосов
/ 12 февраля 2012

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
3 голосов
/ 12 февраля 2012

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

$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 является конечным продуктом.

...