【PHP】配列内で一番多い値を返す

配列内の最頻値を取りたい

array(‘aaa’,’bbb’,’bbb’,’ccc’);
みたいな配列から一番数が多い値(この例ならbbb)を取り出したい
ついでに$countに最大数を入れたいと思って書いたよ。

function return_max_count_item($list,&$count = null){
	if(empty($list)){
		$count = 0;
		return null;
	}

	//値を集計して降順に並べる
	$list = array_count_values($list);
	arsort($list);

	//最初のキーを取り出す
	reset($list);
	$before_key = key($list);
	$before_val = array_shift($list);
	$no1_list = array($before_key);

	//2番目以降の値との比較
	foreach ($list as $key => $val){
		if($before_val > $val){
			break;
		}else{
			// 個数が同値の場合は配列に追加する
			array_push($no1_list,$key);
			$before_key = $key;
			$before_val = $val;
		}
	}
	$count = $before_val;
	if(count($no1_list) > 1){
		//同値の場合の処理があればここに書く、今回はarray_shiftで最初に追加したkeyを返した
		return array_shift($no1_list);
	}else{
		return $before_key;
	}
}
タイトルとURLをコピーしました