从另一个数组创建分组数组

时间:2019-01-05 17:41:46

标签: php arrays

我有一个大数组(从文件读取)

$data = array(
   array(134, 'Field_A_134', 'Field_B_134'),
   array(134, 'Field_C_134', 'Field_D_134'),
   array(134, 'Field_E_134', 'Field_F_134'),
   array(180, 'Field_A_180', 'Field_B_180'),
   array(70, 'Field_A_70', 'Field_B_70'),
   array(180, 'Field_C_180', 'Field_D_180'),
   ...
);

,我想通过第一个数组中的第一个键(例如:134、180、70,...)将其分组到另一个数组中。这些键重复出现,但是字段不同。

我要创建的数组是:

array(
     '134' => array(array(134, 'Field_A_134', 'Field_B_134'), array(134, 'Field_C_134', 'Field_D_134'), array(134, 'Field_E_134', 'Field_F_134')),
     '180' => array(array(180, 'Field_A_180', 'Field_B_180'), array(180, 'Field_C_180', 'Field_D_180')),
     '70' => array(array(70, 'Field_A_180', 'Field_B_180'))
);

每个键都包含一个数组,该数组包含第一个键。

我试图做到这一点:

$f = array();
$pr = array();
foreach($data as $p){
   if(isset($f[$p[0]])){
     array_push($f[$p[0]], $p);
   } else {
     $f[$p[0]] = $p;
   }
   array_push($pr, $f);
}

但这不是我想要的。

1 个答案:

答案 0 :(得分:1)

错误在else部分中。您需要分配一个数组,如下所示:

 $f[$p[0]] = [$p];

或者像这样,因为PHP将动态创建数组:

 $f[$p[0]][] = $p;

由于数组已经存在时也可以使用该代码,因此可以简化为以下循环:

foreach($data as $p) {
    $f[$p[0]][] = $p;
}