2012-07-25 12 views
26

Làm cách nào để đếm số phần tử bên trong một mảng có giá trị bằng hằng số? ví dụ,PHP - đếm giá trị mảng cụ thể

$myArray = array("Kyle","Ben","Sue","Phil","Ben","Mary","Sue","Ben"); 

làm cách nào để trực tiếp biết có bao nhiêu "Ben" ở trong?

Trả lời

64
$array = array("Kyle","Ben","Sue","Phil","Ben","Mary","Sue","Ben"); 
$counts = array_count_values($array); 
echo $counts['Ben']; 
+0

cảm ơn bạn đã trả lời. :) –

+4

nếu mảng là đa chiều? –

+3

@OkiErieRinaldi thì OP cần cập nhật câu hỏi. – James

5

Sử dụng chức năng array_count_values(). Kiểm tra liên kết này http://php.net/manual/en/function.array-count-values.php

+0

Tôi biết điều đó nhưng không đưa ra những gì tôi muốn, nó trả về tất cả số cùng một thành phần –

+0

@ ivory-santos bạn có chắc phương pháp này không hữu ích không? .. kiểm tra liên kết này http://codepad.org/ Ye2x8uQD – swapnesh

+0

@ ivory-santos không phải là những gì bạn chính xác muốn? –

5

Sử dụng array_count_values chức năng.

$ countValues ​​= array_count_values ​​($ myArray);

echo $countValues["Ben"];

6

Bạn có thể thực hiện việc này với array_keysđếm.

$array = array("blue", "red", "green", "blue", "blue"); 
echo count(array_keys($array, "blue")); 

Output:

3 
+0

Đây là câu trả lời hay nhất vì nó không làm phiền php để đếm tất cả các lần xuất hiện của tất cả các giá trị, nó chỉ trả về các khóa đủ điều kiện và đếm chúng trong một cách mà sẽ không bao giờ ném một 'Thông báo'. Nói cách khác,' echo count (array_keys ($ array, "purple")); 'in' 0' không có 'Notice' Đây là một cách tiếp cận cao cấp/sạch hơn so với' array_count_values() '. +1 – mickmackusa

0

Nếu bạn muốn đếm tất cả các lần xuất hiện cùng trong mảng, đây là một chức năng để đếm tất cả, và trả lại kết quả như là một mảng đa chiều:

function countSame($array) { 

$count = count($array); 
$storeArray = array(); 
while ($count > 0) { 
$count--; 

if ($array[$count]) { 
$a = $array[$count]; 
$counts = array_count_values($array); 
$counts = $counts[$a]; 
$tempArray = array($a, $counts); 
array_push($storeArray, $tempArray); 

$keys = array_keys($array, $a); 
foreach ($keys as $k) { 
unset($array[$k]); 
} //end of foreach ($keys as $k) 
} //end of if ($array[$count]) 

} //end of while ($count > 0) 

return $storeArray; 

} //end of function countSame($array) 
0
define('SEARCH_STRING', 'Ben'); 

$myArray = array("Kyle","Ben","Sue","Phil","Ben","Mary","Sue","Ben"); 

$count = count(array_filter($myArray,function($value){return SEARCH_STRING === $value;})); 

echo $count, "\n"; 

Output:

3 
0

array_count_values chỉ hoạt động đối với số nguyên và chuỗi. Nếu bạn tình cờ muốn đếm cho phao/giá trị số (và bạn không chú ý của các biến thể nhỏ trong độ chính xác hoặc đại diện), công trình này:

function arrayCountValues($arr) { 
    $vals = []; 
    foreach ($arr as $val) { array_push($vals,strval($val)); } 
    $cnts = array_count_values($vals); 
    arsort($cnts); 
    return $cnts; 
} 

Lưu ý rằng tôi trở $cnts với các phím như dây đàn. Nó sẽ dễ dàng để reconvert chúng, nhưng tôi đang cố gắng để xác định các chế độ cho các giá trị, vì vậy tôi chỉ cần phải chuyển đổi lại các giá trị đầu tiên (một số).

Tôi đã thử nghiệm một phiên bản được lặp lại, tạo ra một dãy số thay vì sử dụng array_count_values và điều này hóa ra hiệu quả hơn (khoảng 8-10%)!