今次在下又無聊地編寫一個模擬 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 重新開始排列
沒有留言 :
張貼留言