如何将多个php数组转换为一个多维数组?

时间:2015-11-11 17:42:50

标签: php arrays pivot

我正在尝试将具有大多数相似数据的许多数组转换为单个数组,当有多个值时,这些数组在键中包含数组。我认为这是在sql中作为数据透视表完成的,但我想在PHP中这样做是出于其他原因。

我想改造:

$og=array();
$og[] = array('a'=>'cat', 'b'=>'beer', 'c'=>'wood');
$og[] = array('a'=>'cat', 'b'=>'beer', 'c'=>'bamboo');
$og[] = array('a'=>'cat', 'b'=>'beer', 'c'=>'concrete');

分为:

$new_array(
  'a'=>'cat',
  'b'=>'beer',
  'c'=>array('wood','bamboo','concrete')
);

我觉得这应该很简单,但出于某种原因,我无法理解它!

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容来完成此任务:

$new_array = array();

foreach( $og as $data ) {
    foreach( $data as $k => $v ) {

        if( ! isset( $new_array[$k] ) )
            $new_array[$k] = array();

        $new_array[$k][] = $v;

    }
}

foreach( $new_array as $k => $data ) {
    $new_array[$k] = array_unique($data);

    if( count($new_array[$k]) == 1 )
        $new_array[$k] = $new_array[$k][0];

}

结帐array_unique()array_merge()。可能有更快的方法来实现这一目标,但这很有效。

答案 1 :(得分:0)

您可以迭代$ og数组并创建新数组,如下所示:

$new_array = array();
foreach($og as $parr=>$carr) {
    foreach($carr as $key=>$value) {
        if(!array_key_exists($key,$new_array)) {
            $new_array[$key] = $value;
        }else if(!in_array($value,$new_array)) {
            if(is_array($new_array[$key])) {
                array_push($new_array[$key],$value);
            } else {
                $currentVal = $new_array[$key];
                $new_array[$key] = array($key=>$currentVal);
                array_push($new_array[$key],$value);
            }
        }
    }
}

Here is a PHP Fiddle demo