Php количество вхождений массив

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

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

$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);

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

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

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

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

Попробуйте функцию 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))); echo $count, "\n"; 

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

Источник

array_count_values

Функция array_count_values() возвращает массив, ключами которого являются значения массива array (которые должны быть целыми числами ( int ) или строками ( string )), а значениями — количество повторений значений array .

Список параметров

Массив подсчитываемых значений

Возвращаемые значения

Возвращает ассоциативный массив со значениями array в качестве ключей и их количества в качестве значений.

Ошибки

Генерирует ошибку уровня E_WARNING для каждого элемента, не являющегося строкой ( string ) или целым числом ( int ).

Примеры

Пример #1 Пример использования array_count_values()

Результат выполнения данного примера:

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

Смотрите также

  • count() — Подсчитывает количество элементов массива или Countable объекте
  • array_unique() — Убирает повторяющиеся значения из массива
  • array_values() — Выбирает все значения массива
  • count_chars() — Возвращает информацию о символах, входящих в строку

User Contributed Notes 7 notes

Simple way to find number of items with specific values in multidimensional array:

$list = [
[ ‘id’ => 1 , ‘userId’ => 5 ],
[ ‘id’ => 2 , ‘userId’ => 5 ],
[ ‘id’ => 3 , ‘userId’ => 6 ],
];
$userId = 5 ;

echo array_count_values ( array_column ( $list , ‘userId’ ))[ $userId ]; // outputs: 2
?>

Here is a Version with one or more arrays, which have similar values in it:
Use $lower=true/false to ignore/set case Sensitiv.

$ar1 [] = array( «red» , «green» , «yellow» , «blue» );
$ar1 [] = array( «green» , «yellow» , «brown» , «red» , «white» , «yellow» );
$ar1 [] = array( «red» , «green» , «brown» , «blue» , «black» , «yellow» );
#$ar1= array(«red»,»green»,»brown»,»blue»,»black»,»red»,»green»); // Possible with one or multiple Array

$res = array_icount_values ( $ar1 );
print_r ( $res );

function array_icount_values ( $arr , $lower = true ) <
$arr2 =array();
if(! is_array ( $arr [ ‘0’ ])) < $arr =array( $arr );>
foreach( $arr as $k => $v ) <
foreach( $v as $v2 ) <
if( $lower == true ) < $v2 = strtolower ( $v2 );>
if(!isset( $arr2 [ $v2 ])) <
$arr2 [ $v2 ]= 1 ;
>else <
$arr2 [ $v2 ]++;
>
>
>
return $arr2 ;
>
/*
Will print:
Array
(
[red] => 3
[green] => 3
[yellow] => 4
[blue] => 2
[brown] => 2
[white] => 1
[black] => 1
)
*/
?>

I couldn’t find a function for counting the values with case-insensitive matching, so I wrote a quick and dirty solution myself:

function array_icount_values ( $array ) $ret_array = array();
foreach( $array as $value ) foreach( $ret_array as $key2 => $value2 ) if( strtolower ( $key2 ) == strtolower ( $value )) $ret_array [ $key2 ]++;
continue 2 ;
>
>
$ret_array [ $value ] = 1 ;
>
return $ret_array ;
>

$ar = array( ‘J. Karjalainen’ , ‘J. Karjalainen’ , 60 , ’60’ , ‘J. Karjalainen’ , ‘j. karjalainen’ , ‘Fastway’ , ‘FASTWAY’ , ‘Fastway’ , ‘fastway’ , ‘YUP’ );
$ar2 = array_count_values ( $ar ); // Normal matching
$ar = array_icount_values ( $ar ); // Case-insensitive matching
print_r ( $ar2 );
print_r ( $ar );
?>

Array
(
[J. Karjalainen] => 3
[60] => 2
[j. karjalainen] => 1
[Fastway] => 2
[FASTWAY] => 1
[fastway] => 1
[YUP] => 1
)
Array
(
[J. Karjalainen] => 4
[60] => 2
[Fastway] => 4
[YUP] => 1
)

I don’t know how efficient it is, but it seems to work. Needed this function in one of my scripts and thought I would share it.

A cleaner way to use array_count_values() to find boolean counts.

$list = [
[ ‘id’ => 1 , ‘result’ => true ],
[ ‘id’ => 2 , ‘result’ => true ],
[ ‘id’ => 3 , ‘result’ => false ],
];
$result = true ;

echo array_count_values ( array_map ( ‘intval’ , array_column ( $list , ‘result’ )))[(int) $result ];
// outputs: 2
?>

The case-insensitive version:

function array_count_values_ci ( $array ) $newArray = array();
foreach ( $array as $values ) if (! array_key_exists ( strtolower ( $values ), $newArray )) $newArray [ strtolower ( $values )] = 0 ;
>
$newArray [ strtolower ( $values )] += 1 ;
>
return $newArray ;
>
?>

Based on sergolucky96 suggestion
Simple way to find number of items with specific *boolean* values in multidimensional array:

$list = [
[ ‘id’ => 1 , ‘result’ => true ],
[ ‘id’ => 2 , ‘result’ => true ],
[ ‘id’ => 3 , ‘result’ => false ],
];
$result = true ;

echo array_count_values ( array_map (function( $v ) , array_column ( $list , ‘result’ )))[ $result ]
// outputs: 2

array_count_values function does not work on multidimentional arrays.
If $score[][] is a bidimentional array, the command
«array_count_values ($score)» return the error message «Warning: Can only count STRING and INTEGER values!».

Оцените статью