Подтвердить что ты не робот

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

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

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

Как я могу узнать, сколько "Бена" внутри?

4b9b3361

Ответ 1

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

Ответ 3

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

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

echo $countValues["Ben"];

Ответ 4

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

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

Вывод:

3

Ответ 5

попробуйте функцию 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

Ответ 7

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

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)

Ответ 8

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

Ответ 9

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