best/fastest 回显重复数组值及其在 php 中的计数的方法是什么

What is the best/fastest way to echo duplicate array values and their count in php

如果有更好(更快)的方法来输出重复的数组值及其在 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.")";
              }
}

我想知道是否有更好的方法可以在不使用循环内循环的情况下输出唯一值及其计数。

目前我选择这种方法是因为:

  1. 我的输入始终是文本字符串
  2. 文本字符串包含空值且末尾有一个逗号
  3. 我只需要回显非空值

让我知道您的专家建议!

你可以编写你的代码来打印更短的值(我也把其他的东西写得更短):

您不需要 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 . ')';
}