我有很多这样的字符串:
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)我从下面的代码中得到了这些结果:
<?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)被重复了两次。
所以我想得到这样的结果:
6 (39) - (3)
7 (40.5) - (2)当然,我不需要只对7 (41)和10 (44)这样做;我需要找到所有重复的字符串,并将它们显示在一行中并放在一边,以显示它们被重复了多少次。
希望你能很好地理解我。
提前感谢!
发布于 2015-12-20 18:08:51
预先警告: OP编辑了他们的帖子好几次,所以下面有多个答案。我要把它们都留在原处以防别人发现它们有帮助。
原始答案
您可以正确地使用array_count_values()函数:它返回一个新数组,每个重复值作为数组键,并且该值显示为数组值的次数。使用您的原始示例,您需要这样的内容:
$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的字符串的数量,但你明白了。该脚本的输出:
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编辑了他们的帖子,使我原来的答案不正确。使用他们编辑的版本,正确的代码如下:
$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查询。这是一个棘手的问题,因为我不知道确切的数据是什么,但根据他们之前的编辑,答案可能如下所示:
$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";
}https://stackoverflow.com/questions/34384082
复制相似问题