PHP – подсчет конкретных значений массива

Как я могу подсчитать количество элементов внутри массива со значением, равным константе? пример,

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

как я могу непосредственно узнать, сколько «Бена» внутри?

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

Используйте функцию array_count_values() . Проверьте эту ссылку http://php.net/manual/en/function.array-count-values.php

Используйте функцию array_count_values .

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

echo $countValues["Ben"];

Вы можете сделать это с помощью array_keys и подсчитать .

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

Вывод:

 3 

попробуйте функцию array_count_values ​​()

 <?php $array = array(1, "hello", 1, "world", "hello"); print_r(array_count_values($array)); ?> 

вывод:

 Array ( [1] => 2 [hello] => 2 [world] => 1 ) 

http://php.net/manual/en/function.array-count-values.php

Попробуйте функцию PHP array_count_values .

Если вы хотите подсчитать ВСЕ те же вхождения внутри массива, вот функция, чтобы подсчитать их все и вернуть результаты в виде многомерного массива:

 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) с 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) 
 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 

array_count_values работает только для целых чисел и строк. Если вам посчастливилось подсчитывать значения float / numeric (и вы не учитываете небольшие вариации точности или представления), это работает:

 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%)!