Каким будет наиболее эффективный PHP способ получить уникальные значения из массива массивов и отсортировать их по количеству вхождений от наиболее частого до наименее значимого?
Пример входного массива:
Array
(
[0] => Array
(
[0] => A
[1] => B
[2] => C
[3] => D
)
[1] => Array
(
[0] => A
[1] => C
[2] => D
)
[2] => Array
(
[0] => C
[1] => F
[2] => X
)
)
Результатом будет следующий выходной массив:
Array
(
[0] => C // 3
[1] => A // 2
[2] => D // 2
[3] => B // 1
[4] => F // 1
[5] => X // 1
)
Алфавитный порядок значений с одинаковым количеством вхождений не важен.
Пока я объединяю массив массивов :
$all_posts = call_user_func_array( 'array_merge', $results );
Затем создается новый массив, в котором значения становятся ключами. И значения - это количество раз, которое они встречаются в исходном массиве массивов.
$posts_by_count = array();
foreach( $all_posts as $apost ) {
$posts_by_count[ $apost ] = 0;
foreach( $results as $tag_posts ) {
if( in_array( $apost, $tag_posts ) ) {
$posts_by_count[ $apost ]++;
}
}
}
Затем я могу отсортировать по значению
arsort($posts_by_count);
И создать новый массив, в котором ключи снова становятся значениями .
$sorted_posts = array();
foreach($posts_by_count as $k => $v) {
$sorted_posts[] = $k;
}
pprint( $sorted_posts );
Что было бы более эффективным способом сделать это?