2012-07-25 76 views
26

如何計算數組中等於常量的元素數? 例如,PHP - 計數特定數組值

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

我怎麼能直接知道「奔」是多少裏面?

回答

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

感謝回答。 :) – 2012-07-25 09:15:51

+4

如果數組是多維的呢? – 2014-09-16 04:41:07

+3

@OkiErieRinaldi然後OP需要更新問題。 – James 2015-03-11 01:45:05

5

使用array_count_values()函數。檢查此鏈接http://php.net/manual/en/function.array-count-values.php

+0

我知道,但沒有給出我想要的,它返回所有相同的元素的數量 – 2012-07-25 08:59:22

+0

@象牙 - 桑托斯你確定這種方法是沒有用的?? ..檢查此鏈接http://codepad.org/ Ye2x8uQD – swapnesh 2012-07-25 09:01:22

+0

@象牙 - 桑托斯不是你想要的嗎? – 2012-07-25 09:01:43

6

您可以使用array_keyscount

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

輸出:

3 
+0

)這是最好的答案,因爲它不會打擾php計算所有值的所有出現次數,它只是返回合格鍵並計入它們換句話說,echo count(array_keys($ array,「purple」));'打印'0'不帶'Notice'這是一個優於/清晰的方法,而'array_count_values ()'。+1 – mickmackusa 2017-11-15 04:16:18

0

如果要算上陣列內所有相同的出現次數,這裏有一個函數來計算它們,並將結果作爲多維數組的形式返回:

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"; 

輸出:

3 
0

array_count_values僅適用於整數和字符串。如果你碰巧要浮法/數值計數(和你是不顧精度或表示小的變化),這工作:

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

注意,我回到$cnts與鍵爲字符串。這很容易重新生成它們,但我試圖確定模式的值,所以我只需要重新轉換第一個(幾個)值。

我測試了一個循環版本,創建了一個計數數組而不是使用array_count_values,結果證明效率更高(大概8-10%)!