array_count_valuesで文字列データを集計後ソートする

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に満たない場合

はハッシュ配列から削除する処理を行っている。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

array_count_valuesで文字列データを集計後ソートするの記事にコメントを投稿