2015-12-25 22 views
3

我有重複值的數組。怎麼能算在php數組重複值?

我想打印的所有項目,也有重複的值,我想打印數量太多。

像這樣:

$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 

回答

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相同的輸出,而是分成它是如何形成碎片......我想