我有一个包含重复值的数组。
我想打印出所有项,但对于重复的值,我还想打印出一个数字。
就像这样:
$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
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
$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
有相同的输出,但是它被拆分成了形成方式的几个部分... 我想。