2009-07-23 25 views
86

我正在使用PHP中的一維數組。我想檢測重複值的存在,然後統計重複值的數量並輸出結果。例如,假設下面的數組:如何檢測PHP數組中的重複值?

$array = array('apple', 'orange', 'pear', 'banana', 'apple', 
    'pear', 'kiwi', 'kiwi', 'kiwi'); 

我想打印:

apple (2) 
orange 
pear (2) 
banana 
kiwi (3) 

對如何處理這個問題有什麼建議?

謝謝。

邁克

回答

188

可以使用array_count_values功能

$array = array('apple', 'orange', 'pear', 'banana', 'apple', 
'pear', 'kiwi', 'kiwi', 'kiwi'); 

print_r(array_count_values($array)); 

將輸出

Array 
(
    [apple] => 2 
    [orange] => 1 
    [pear] => 2 
    etc... 
) 
2

地把它們塞進一個map(僞)

map[string -> int] $m 
foreach($word in $array) 
{ 
    if(!$m.contains($word)) 
     $m[$word] = 0; 

    $m[$word] += 1; 
} 
2

也許這樣的事情(未經測試的代碼,但應該給你一個想法)?

$new = array(); 

foreach ($array as $value) 
{ 
    if (isset($new[$value])) 
     $new[$value]++; 
    else 
     $new[$value] = 1; 
} 

然後你會得到一個新的數組作爲鍵的值,它們的值是它們在原始數組中存在的次數。

+0

很好的回答,但PHP有一個現有的功能做到了這一點:[`array_count_values`(http://php.net/array_count_values) – Navarr 2016-01-27 16:04:53

6

您可以嘗試將該數組轉換爲關聯數組,其中水果作爲關鍵字,出現次數作爲值。位長囉嗦,但它看起來像:

$array = array('apple', 'orange', 'pear', 'banana', 'apple', 
    'pear', 'kiwi', 'kiwi', 'kiwi'); 
$new_array = array(); 
foreach ($array as $key => $value) { 
    if(isset($new_array[$value])) 
     $new_array[$value] += 1; 
    else 
     $new_array[$value] = 1; 
} 
foreach ($new_array as $fruit => $n) { 
    echo $fruit; 
    if($n > 1) 
     echo "($n)"; 
    echo "<br />"; 
} 
+1

很好的回答,但PHP有一個現有的功能,只是這樣做:[`array_count_values`](http://php.net/array_count_values) – Navarr 2016-01-27 16:04:26

7

擺脫使用array_unique()。檢測是否有任何用處count(array_unique())並與count($array)比較。

20
function array_not_unique($a = array()) 
{ 
    return array_diff_key($a , array_unique($a)); 
} 
+0

這是一個解決方案的答案。 「 – usumoio 2016-07-29 18:52:10

91
if(count(array_unique($array))<count($array)) 
{ 
    // Array has duplicates 
} 
else 
{ 
    // Array does not have duplicates 
} 
+0

」...然後計算重複值的數量並將結果輸出。「 – showdev 2018-03-09 01:31:12

3
<?php 

$arr = array(1, 2, 3, 2, 5, 6, 7); 

print_r(array_count_values($arr)); 

?> 
0
$count = 0; 
$output =''; 
$ischeckedvalueArray = array(); 
for ($i=0; $i < sizeof($array); $i++) { 
    $eachArrayValue = $array[$i]; 
    if(! in_array($eachArrayValue, $ischeckedvalueArray)) { 
     for($j=$i; $j < sizeof($array); $j++) { 
      if ($array[$j] === $eachArrayValue) { 
       $count++; 
      } 
     } 
     $ischeckedvalueArray[] = $eachArrayValue; 
     $output .= $eachArrayValue. " Repated ". $count."<br/>"; 
     $count = 0; 
    } 

} 

echo $output;