首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP -查找重复的字符串并将其分组并进行计数。

问PHP -查找重复的字符串并将其分组并进行计数。
EN

Stack Overflow用户
提问于 2015-12-20 18:01:51
回答 1查看 102关注 0票数 1

我有很多这样的字符串:

代码语言:javascript
复制
6 (39), 10 (44), 11 (45), 11½ (45.5), 12 (46)
6 (39), 7 (40.5), 8 (42), 8½ (42.5), 9 (43), 10 (44.5), 11 (46)
6 (39), 7 (40.5), 8 (42), 8½ (42.5), 9 (43), 11 (46)

我从下面的代码中得到了这些结果:

代码语言:javascript
复制
<?PHP 
$rscat = mysql_query("SELECT `Sizes` FROM `products` WHERE `Category`='$Cat'");   
while($rowscat = mysql_fetch_array($rscat))
{


    $CatSizes =  $rowscat['Sizes'];

    echo "$CatSizes <br>";

}
?>

我想要的:正如您在上一个示例中看到的那样,字符串6 (39)被重复了三次,字符串7 (40.5)被重复了两次。

所以我想得到这样的结果:

代码语言:javascript
复制
6 (39) - (3)
7 (40.5) - (2)

当然,我不需要只对7 (41)和10 (44)这样做;我需要找到所有重复的字符串,并将它们显示在一行中并放在一边,以显示它们被重复了多少次。

希望你能很好地理解我。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-20 18:08:51

预先警告: OP编辑了他们的帖子好几次,所以下面有多个答案。我要把它们都留在原处以防别人发现它们有帮助。

原始答案

您可以正确地使用array_count_values()函数:它返回一个新数组,每个重复值作为数组键,并且该值显示为数组值的次数。使用您的原始示例,您需要这样的内容:

代码语言:javascript
复制
$input = <<<EOT
7 (41)
8 (42)
9 (43)
10 (44)
11 (45)
6 (39)
7 (41)
EOT;

$split = explode("\n", $input);
$counted = array_count_values($split);

foreach($counted as $value => $count) {
    echo "$value - ($count)\n";
}

注意:为了简洁起见,我减少了进入$input的字符串的数量,但你明白了。该脚本的输出:

代码语言:javascript
复制
7 (41) - (8)
8 (42) - (6)
9 (43) - (6)
10 (44) - (6)
11 (45) - (7)
8½ (42.5) - (1)
12 (46) - (1)
6 (39) - (3)

您可能会发现值()有帮助的阅读。

更新#1

OP编辑了他们的帖子,使我原来的答案不正确。使用他们编辑的版本,正确的代码如下:

代码语言:javascript
复制
$input = "6 (39), 10 (44), 11 (45), 11½ (45.5), 12 (46), 6 (39), 7 (40.5), 8 (42), 8½ (42.5), 9 (43), 10 (44.5), 11 (46), 6 (39), 7 (40.5), 8 (42), 8½ (42.5), 9 (43), 11 (46)";

$split = explode(", ", $input);
$counted = array_count_values($split);

foreach($counted as $value => $count) {
    echo "$value - ($count)\n";
}

警告:确保所有项目都用逗号分隔,而不是用新行和逗号混合起来。OP:您应该像原来的版本那样选择新的行,或者选择逗号,但是如果您想让这段代码工作,就不要将这两行代码混在一起。

更新#2

OP要求修改解决方案,因此它直接使用他们的SQL查询。这是一个棘手的问题,因为我不知道确切的数据是什么,但根据他们之前的编辑,答案可能如下所示:

代码语言:javascript
复制
$rscat = mysql_query("SELECT `Sizes` FROM `products` WHERE `Category`='$Cat'");
$arrayOfSizes = [];

while($rowscat = mysql_fetch_array($rscat)) {
    $arrayOfSizes[] = $rowscat['Sizes'];
}

$counted = array_count_values($arrayOfSizes);

foreach($counted as $value => $count) {
    echo "$value - ($count)\n";
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34384082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档