php数组分组
很多时候我们需要对一个数组进行分类,例如从数据库里取出N条记录,然后要把它们分为好几类。数据库的sql语句好像没这个功能。
最理想的是在这些记录数组外面再分一层数组,这个上层数组的键名就是分类名。既然不能直接从sql语句中实现效果,我们只要从处理数组下手。
看下面例子:
$arr = array(array('countyid' => 1, 'county' => '中国', 'province' => '湖南'),
array('countyid' => 1, 'county' => '中国', 'province' => '湖南'),
array('countyid' => 3, 'county' => '日本', 'province' => '名古屋'),
array('countyid' => 3, 'county' => '日本', 'province' => '东京'),
array('countyid' => 1, 'county' => '中国', 'province' => '北京'),
array('countyid' => 1, 'county' => '中国', 'province' => '山东'),
array('countyid' => 1, 'county' => '中国', 'province' => '山东'),
array('countyid' => 2, 'county' => '美国', 'province' => '安大略'),
array('countyid' => 2, 'county' => '美国', 'province' => '安大略'),
array('countyid' => 3, 'county' => '日本', 'province' => '名古屋'),
);
现在我们的需求是按国家分类,形成以下数组:
$newArr = array(
‘中国’ => array(
0 => array('countyid' => 1, 'county' => '中国', 'province' => '湖南'),
1 => array('countyid' => 1, 'county' => '中国', 'province' => '湖南'),
....
),
‘日本’ => array(
0 => array('countyid' => 3, 'county' => '日本', 'province' => '名古屋'),
1 => array('countyid' => 3, 'county' => '日本', 'province' => '东京'),
),
)
思路如下:遍历,构建新数组。
$newArr = array();
foreach($arr as $v) {
$newArr[$v['county']][] = $v;
}
foreach($arr as $v) {
$newArr[$v['county']][] = $v;
}
或者我们可以做统计:
$newArr = array(
‘中国’ => 5,
‘日本’ => 6,
)
$newArr = array();
foreach($arr as $v) {
$newArr[$v['county']]++;
}
$newArr[$v['county']]++;
}
注意,第二个方法(++的那个)会爆出notice。