Мне нужен ваш совет, если есть лучший (и более быстрый) способ вывода дублированных значений массива и их количества в php.
В настоящее время я делаю это с помощью приведенного ниже кода:
Первоначальный ввод всегда является текстовой строкой:
$text = "a,b,c,d,,,e,a,b,c,d,f,g,"; //Note the comma at the end
Затем я получаю уникальные значения массива:
$arrText = array_unique(explode(',',rtrim($text,',')));
Затем я подсчитываю повторяющиеся значения в массиве (исключая пустые):
$cntText = array_count_values(array_filter(explode(',', $text)));
И, наконец, я повторяю значения массива и их количество в цикле внутри цикла:
foreach($arrText as $text){
echo $text;
foreach($cntText as $cnt_text=>$count){
if($cnt_text == $text){
echo " (".$count.")";
}
}
Мне интересно, есть ли лучший способ вывести уникальные значения и их количество без использования цикла внутри цикла.
В настоящее время я выбрал этот подход, потому что:
Дайте мне знать ваши советы экспертов!
Вы можете написать свой код для печати значений намного короче (также я написал другие вещи немного короче):
Вам не нужно rtrim()
или же array_unique()
Вам нужно только explode()
и с array_filter()
Вы заботитесь о пустых значениях. Тогда просто используйте array_count_values()
и цикл по значениям.
<?php
$text = "a,b,c,d,,,e,a,b,c,d,f,g,";
$filtered = array_filter(explode(",", $text));
$countes = array_count_values($filtered);
foreach($countes as $k => $v)
echo "$k ($v)";
?>
выход:
a (2)b (2)c (2)d (2)e (1)f (1)g (1)
Вам не нужно создавать два массива как array_count_values
ключи — это значение текста.
$myArray = array_count_values(array_filter(explode(',',$text)));
foreach($myArray as $key => $value){
echo $key . ' (' . $value . ')';
}