2009-07-23 76 views
86

Tôi đang làm việc với mảng một chiều trong PHP. Tôi muốn phát hiện sự hiện diện của các giá trị trùng lặp, sau đó đếm số lượng các giá trị trùng lặp và đưa ra kết quả. Ví dụ, với các mảng sau:Làm thế nào để phát hiện các giá trị trùng lặp trong mảng PHP?

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

Tôi muốn in:

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

Bất cứ lời khuyên về cách tiếp cận vấn đề này?

Cảm ơn.

Mike

Trả lời

188

Bạn có thể sử dụng chức năng array_count_values

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

print_r(array_count_values($array)); 

chí đầu ra

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

Stuff chúng thành một map (giả)

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

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

Có lẽ một cái gì đó như thế này (mã chưa được kiểm tra nhưng nên cung cấp cho bạn một ý tưởng)?

$new = array(); 

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

Sau đó, bạn sẽ nhận được một mảng mới với các giá trị như khóa và giá trị của chúng là số lần chúng tồn tại trong mảng ban đầu.

+0

Tốt câu trả lời, nhưng PHP có một chức năng hiện có mà chỉ làm điều đó: [ 'array_count_values'] (http://php.net/array_count_values) – Navarr

6

Bạn có thể thử biến mảng đó thành mảng kết hợp với các thành quả dưới dạng khóa và số lần xuất hiện dưới dạng giá trị. Bit dài hơi, nhưng có vẻ như:

$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

câu trả lời tốt, nhưng PHP có một chức năng hiện có mà chỉ làm điều đó: ['array_count_values'] (http://php.net/array_count_values) – Navarr

7

Để thoát khỏi sử dụng array_unique(). Để phát hiện nếu có bất kỳ sử dụng nào count(array_unique()) và so sánh với count($array).

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

Đây là một câu trả lời dope. – usumoio

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

"... sau đó đếm số lượng giá trị trùng lặp và đặt kết quả." – showdev

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; 
Các vấn đề liên quan