今次在下又無聊地編寫一個模擬 GROUP BY 的語法
function array_groupby($array, $groups){
if (count($groups) > 0){
$fields = array();
foreach ($array as $key => $value){
$field = array();
$grouped = true;
foreach ($groups as $group){
if (isset($value[$group])){
$field[$group] = $value[$group];
} else {
$grouped = false;
break;
}
}
if ($grouped){
if (in_array($field, $fields, true)){
unset($array[$key]);
} else {
array_push($fields, $field);
}
} else {
unset($array[$key]);
}
}
}
return array_values($array);
}使用$array = array( array( 'id' => 1, 'age' => 18, 'height' => 180, ), array( 'id' => 2, 'age' => 22, 'height' => 160, ), array( 'id' => 3, 'age' => 18, 'height' => 160, ), array( 'id' => 4, 'age' => 22, 'height' => 180, ), ); $groups = array( 'age', ); $array = array_groupby($array, $groups); print_r($array);設計上大致與 SQL 既 GROUP BY 相似
會將群組化的第一個紀錄成為輸出資料
最後用 array_values($array) 將 index 由 0 重新開始排列
沒有留言 :
張貼留言