我有一个重复值的数组.
我想要打印所有项目但也要重复值,我也要打印一个数字.
像这样:
$arr = array('sara','jorj','sara','sara','jorj','eli','ana')
foreach($arr as $name)
{
echo $name;
}
Run Code Online (Sandbox Code Playgroud)
怎么打印这个结果:
sara
jorj
sara-2
sara-3
jorj-2
eli
ana
Run Code Online (Sandbox Code Playgroud)
这应该适合你:
这里我首先array_slice()用来获取迭代当前元素之前的所有元素的数组,例如
iteration value | sliced array
-----------------------------------
sara | []
jorj | [sara]
Run Code Online (Sandbox Code Playgroud)
然后我使用这个数组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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
sara
jorj
sara - 2
sara - 3
jorj - 2
eli
ana
Run Code Online (Sandbox Code Playgroud)