我有一个多维数组,想要根据特定列中的值进行分组。
我想要根据level进行分组,但我事先不知道level的值。所以,我不能像在for循环中那样说while $i < 7,因为我不知道7是level键的最大值,而且即使我知道也不确定我是否需要这样做。
[
['cust' => 'XT8900', 'type' => 'standard', 'level' => 1],
['cust' => 'XT8944', 'type' => 'standard', 'level' => 1],
['cust' => 'XT8922', 'type' => 'premier', 'level' => 3],
['cust' => 'XT8816', 'type' => 'permier', 'level' => 3],
['cust' => 'XT7434', 'type' => 'standard', 'level' => 7],
]
期望的结果:
Array (
[1] => Array (
[0] => Array (
[cust] => XT8900
[type] => standard
)
[1] => Array (
[cust] => XT8944
[type] => standard
)
)
[3] => Array (
[2] => Array (
[cust] => XT8922
[type] => premier
)
[3] => Array (
[cust] => XT8816
[type] => permier
)
)
[7] => Array (
[4] => Array (
[cust] => XT7434
[type] => standard
)
)
)
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
最好的方法是,如果您对构建初始数组有控制权,那么在添加条目时,只需一开始就设置好。
如果没有控制权,则构建一个临时数组进行排序:
foreach ($input_arr as $key => &$entry) { $level_arr[$entry['level']][$key] = $entry; }这样可以得到您想要的形式,并且所有引用都在一起。
如果可能的话,一开始就像这样构建数组。
首先,你需要按照级别对它们进行分组
使用foreach循环遍历数组,检查级别是否与前一个项目相同,然后将其与该数组分组
$templevel=0; $newkey=0; $grouparr[$templevel]=""; foreach ($items as $key => $val) { if ($templevel==$val['level']){ $grouparr[$templevel][$newkey]=$val; } else { $grouparr[$val['level']][$newkey]=$val; } $newkey++; } print($grouparr);print($grouparr);的输出将以你希望的格式显示
你也可以尝试
将显示
[7] => Array ( [4] => Array ( [cust] => XT7434 [type] => standard ) )或者
将显示
[3] => Array ( [2] => Array ( [cust] => XT8922 [type] => premier ) [3] => Array ( [cust] => XT8816 [type] => permier ) )