如何在PHP中组合/合并具有相同键的多维数组?

时间:2013-04-14 00:00:12

标签: php arrays

所以我有这个vardump看起来像这样的数组:

array (size=4)
  0 => 
    array (size=1)
      'field_4' => 
        array (size=1)
          0 => string 'item-1' (length=6)
  1 => 
    array (size=1)
      'field_4' => 
        array (size=1)
          0 => string 'info-1' (length=6)
  2 => 
    array (size=1)
      'field_5' => 
        array (size=1)
          0 => string 'item-2' (length=6)
  3 => 
    array (size=1)
      'field_5' => 
        array (size=1)
          0 => string 'info-2' (length=6)

所以我试图将数组与相同的键组合,例如'field_4'将合并/组合成一个包含2个项目“item-1”和“info-1”的数组。

所以我想要的最终结果是:

array (size=2)
  0 => 
    array (size=1)
      'field_4' => 
        array (size=2)
          0 => string 'item-1' (length=6)
          1 => string 'info-1' (length=6)
  1 => 
    array (size=1)
      'field_5' => 
        array (size=1)
          0 => string 'item-2' (length=6)
          1 => string 'info-2' (lenght=6)

那么有一个PHP便利函数来处理这个问题还是我必须重建数组?

感谢您的光临。

1 个答案:

答案 0 :(得分:1)

只需遍历输入数组,构建合并数组:

$merged = array();
foreach ($input as $a)
    foreach ($a as $k => $v)
        foreach ($v as $v2)
            $merged[$k][] = $v2;

然后将其展平为您需要的奇怪输出:

$flattened = array();
foreach ($merged as $k => $v)
    $flattened[] = array($k => $v);

输入:

$input = array(
    array('field_4' => array('item-1')),
    array('field_4' => array('info-1')),
    array('field_5' => array('item-2')),
    array('field_5' => array('info-2')),
);

输出:

array(
    array('field_4' => array('item-1', 'info-1')),
    array('field_5' => array('item-2', 'info-2')),
)

转储输出时,print_rvar_exportvar_dump

更具有可读性。