<?php
/**
* 根据子字段分组
* @param $data 原始数据
* @param $keys 需要分组的字段
* @return mixed
*/
public function groupBy($array, $keys)
{
$i = 0;
while ($i < count($array)) {
$x = count($array) - 1;
while ($x > $i) {
//取数组交集并返回交集,保留键名
$temp = array_intersect_assoc($array[$i], $array[$x]);
if (!empty($temp)) {
// 取键名交集,并做比较,如果相交等于分组依据的键名,则说明两个子数组可以合并
if (array_intersect_assoc($keys, array_keys($temp)) == $keys) {
foreach ($array[$i] as $k => $v) {
if (!in_array($k, $keys)) {
$array[$i][$k] += $array[$x][$k];
}
}
//将合并部分移出数组
array_splice($array, $x, 1);
}
}
$x--;
}
$i++;
}
return $array;
}
?>
|