PHPでカンマで連結した文字列を分割後個数を集計してソートする
実際にはカンマ繋ぎではなく、スペースで区切られた文字列データやタブ区切りデータでも対応できるのだがカンマを例にしてみる。
$tmpには、
りんご,りんご,みかん,ぶどう,りんご,ぶどう,ぶどう,みかん,りんご
のような文字列が格納されている状態を想定している。以下のコード例では、まず$tmpをカンマで分割して配列化し、その配列に対して、
array_count_values
というPHPの配列集計関数で処理を行っている。
$data = array_count_values(explode(",", $tmp));
上のコードの$data内には以下のようなハッシュ配列化されたデータが格納されている。以下の状態は、phpでvar_dumpした状態。
array(3) { ["りんご"]=> int(4) ["みかん"]=> int(2) ["ぶどう"]=> int(3) }
上のハッシュ配列の結果では、key値として実データ名、value値にそれぞれの個数が格納されているが、ソートされていない状態になっている。value値の数でソートを行うには以下のようにすると対応できる。
$data = array_count_values(explode(",", $tmp)); arsort($data);
arsortを利用することで、value値の数が多い順にソートすることができた。
array(3) { ["りんご"]=> int(4) ["ぶどう"]=> int(3) ["みかん"]=> int(2) }
arsortをかける前にハッシュ配列をフィルターして余計なデータを除外することも可能。
$data = array_count_values(explode(",", $tmp)); foreach ($data as $key => $value) { if( $key == "" or $value < 3 ) { unset($data[$key]); } } arsort($data);
上のコードの例では、配列を集計した後、foreachでハッシュ配列の走査を行い、
$keyが空の場合
$value(データの個数)が3に満たない場合
はハッシュ配列から削除する処理を行っている。