我有一个大数组(从文件读取)
$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);
}
但这不是我想要的。
答案 0 :(得分:1)
错误在else
部分中。您需要分配一个数组,如下所示:
$f[$p[0]] = [$p];
或者像这样,因为PHP将动态创建数组:
$f[$p[0]][] = $p;
由于数组已经存在时也可以使用该代码,因此可以简化为以下循环:
foreach($data as $p) {
$f[$p[0]][] = $p;
}