如何在php中计算重复的数组值?

3

我有一个包含重复值的数组。

我想打印出所有项,但对于重复的值,我还想打印出一个数字。

就像这样:

$arr = array('sara','jorj','sara','sara','jorj','eli','ana')

foreach($arr as $name)
{
   echo $name;
}

如何打印这个结果:
sara
jorj
sara-2
sara-3
jorj-2
eli
ana
2个回答

8
这应该适用于您:
这里我首先使用array_slice(),以获取迭代当前元素之前的所有元素的数组。
iteration value   |  sliced array
-----------------------------------
     sara         |       []
     jorj         |     [sara]

然后我使用这个数组和array_filter(),只保留值等于当前迭代值的元素,以便在当前值之前计算有多少个相同的值在数组中。
现在,我只需要count()它们的数量,如果数量超过1,我们也将其打印到输出中。
代码:
$arr = array('sara','jorj','sara','sara','jorj','eli','ana');

foreach($arr as $key => $name) {
    $count = count(array_filter(array_slice($arr, 0, $key), function($v)use($name){
       return $v == $name;
    })) + 1;

   echo $name . ($count > 1 ? " - $count" : "") . PHP_EOL;
}

输出:

sara
jorj
sara - 2
sara - 3
jorj - 2
eli
ana

2
也许我回答有点晚了,但这是我的尝试。
$arr = array('sara','jorj','sara','sara','jorj','eli','ana');
$tmp = array();

foreach ($arr as $value) {
    if (!isset($tmp[$value]) ) {
        // if $value is not found in tmp array
        // initialize the value in tmp array and set to 1
        $tmp[$value] = 1;
        echo $value;
    }
    else {
        // found the value in tmp array
        // add 1 to the value in tmp array
        // output its current total count of this value
        $tmp[$value] += 1;
        echo "$value-", $tmp[$value]; 
    }
    echo "<br>";
}

输出:

sara
jorj
sara-2
sara-3
jorj-2
eli
ana

这实际上与 array_count_values 有相同的输出,但是它被拆分成了形成方式的几个部分... 我想。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接