Перейти к содержимому

Как посчитать количество элементов в массиве php

  • автор:

array_count_values

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

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

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

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

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

Ошибки

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

Примеры

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

$array = array( 1 , «hello» , 1 , «world» , «hello» );
print_r ( array_count_values ( $array ));
?>

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

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

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

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

User Contributed Notes 8 notes

5 years ago

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
?>

13 years ago

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
)
*/
?>

16 years ago

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.

1 month ago

If you have a multidimensional array with unknown dimensions, you cannot use this function, use instead:

function array_count_recursive (array $arr ): array $occurrences = [] ;
array_walk_recursive ( $arr , function( $value , $key ) use (& $occurrences ) @ $occurrences [ $value ]++;
// @ to surpress warnings «Undefined array key». In php8 you can also use
// $occurrences[$value] = ($occurrences[$value] ?? 0) + 1
>);
return $occurrences ;
>
?>

10 months ago

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
?>

20 years ago

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!».

9 years ago

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

3 years ago

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_​change_​key_​case
    • array_​chunk
    • array_​column
    • array_​combine
    • array_​count_​values
    • array_​diff_​assoc
    • array_​diff_​key
    • array_​diff_​uassoc
    • array_​diff_​ukey
    • array_​diff
    • array_​fill_​keys
    • array_​fill
    • array_​filter
    • array_​flip
    • array_​intersect_​assoc
    • array_​intersect_​key
    • array_​intersect_​uassoc
    • array_​intersect_​ukey
    • array_​intersect
    • array_​is_​list
    • array_​key_​exists
    • array_​key_​first
    • array_​key_​last
    • array_​keys
    • array_​map
    • array_​merge_​recursive
    • array_​merge
    • array_​multisort
    • array_​pad
    • array_​pop
    • array_​product
    • array_​push
    • array_​rand
    • array_​reduce
    • array_​replace_​recursive
    • array_​replace
    • array_​reverse
    • array_​search
    • array_​shift
    • array_​slice
    • array_​splice
    • array_​sum
    • array_​udiff_​assoc
    • array_​udiff_​uassoc
    • array_​udiff
    • array_​uintersect_​assoc
    • array_​uintersect_​uassoc
    • array_​uintersect
    • array_​unique
    • array_​unshift
    • array_​values
    • array_​walk_​recursive
    • array_​walk
    • array
    • arsort
    • asort
    • compact
    • count
    • current
    • end
    • extract
    • in_​array
    • key_​exists
    • key
    • krsort
    • ksort
    • list
    • natcasesort
    • natsort
    • next
    • pos
    • prev
    • range
    • reset
    • rsort
    • shuffle
    • sizeof
    • sort
    • uasort
    • uksort
    • usort
    • each
    • Copyright © 2001-2023 The PHP Group
    • My PHP.net
    • Contact
    • Other PHP.net sites
    • Privacy policy

    Как посчитать из массива количество элементов php

    введите сюда описание изображения

    Вот не могу решить задачу. Надо посчитать элементы массива на изображении как это сделать? Ключи массива можно считать внутренние данные не нужны. Но таких массивов может быть много и вложенности массивов тоже. Как реализовать?

    Отслеживать
    задан 25 фев 2019 в 15:13
    1 4 4 бронзовых знака
    Для начала корректно задать вопрос.
    25 фев 2019 в 15:15

    Ну вот не знаю как вам задать. Надо посчитать вложенные элементы массива у которых есть childs. Например на изображении у 24 элемента есть 2 потомка 25 и 26. а таких вложенностей может быть много

    25 фев 2019 в 15:21

    В тексте вопроса укажите, что должно получиться при подсчете вот по этому примеру на картинке и поясните почему получено именно такое значение

    25 фев 2019 в 15:35

    Mike, эти данные взяты из базы мне нужно лишь посчитать внутренние элементы массива childs и все. Но не знаю как это сделать

    25 фев 2019 в 15:59
    если это взято из базы то может и решить это следует на стороне базы, а не вытаскивать в пхп?
    25 фев 2019 в 17:37

    1 ответ 1

    Сортировка: Сброс на вариант по умолчанию

    count($array, COUNT_RECURSIVE) 

    Если необязательный параметр mode установлен в COUNT_RECURSIVE (или 1), count() будет рекурсивно подсчитывать количество элементов массива. Это особенно полезно для подсчёта всех элементов многомерных массивов.

    Или используйте рекурсию, если только childs нужно подсчитать, что-то вроде этого

    function count_array($array, $sum = 0) < foreach($array as $k)< $sum++; if(!empty($k['childs']) && is_array($k['childs']))< $sum += count_array($k['childs']); >> return $sum; > 

    Как посчитать количество элементов в массиве php

    Все, что необходимо начинающему и опытному программисту

    Вычисление суммы и количества элементов массива с заданными свойствами

    Еще одна задача — посчитать сумму элементов, которые удовлетворяют какому-то условию. Наверное, вы уже поняли общий принцип: перебираем все элементы массива (цикл for) и проверяем для каждого элемента выполнение условия (оператор if).
    Если условие выполнено, добавим элемент к сумме (S := S+A[i]).

    Пример 8.5.
    Вычисление суммы положительных элементов массива

    Вот задача, очень похожая на предыдущую: посчитать количество элементов массива с указанными свойствами. Решается аналогично: переберем все элементы, проверим для каждого условие и, если оно выполнено, увеличим счетчик на единицу (к := к+1).

    Пример 8.6.
    Вычисление количества четных элементов массива (блок-схема алгоритма показана на рис. 8.7)

    2015-04-10 ответил Мирелиш

    Как посчитать количество элементов в массиве php

    Массив представляет набор однотипных данных. Формальное определение массива выглядит следующим образом:

    тип_переменной название_массива [длина_массива]

    После типа переменной идет название массива, а затем в квадратных скобках его размер. Например, определим массив из 4 чисел:

    int numbers[4];

    Число элементов массива также можно определять через константу:

    const int n = 4; int numbers[n]; // содержит 4 элемента

    Некоторые компиляторы (например, G++) также поддерживают установку размера с помощью переменных.

    Данный массив имеет четыре числа, но все эти числа имеют неопределенное значение. Чтобы установить значения элементов массива, указываются фигурные скобки (инициализатор), внутри которых перечисляются значения для элементов массива:

    int numbers[4] <>; //

    В данном случае фигурные скобки пусты, поэтому все элементы массива получают нулевые значения.

    Также мы можем указать конкретные значения для всех элементов массива:

    int numbers[4] ;

    В данном случае в памяти выделяется некоторая область из четырех ячеек по 4 байта (размер типа int), где каждая ячейка содержит определенный элемент массива:

    Если значений в инициализаторе меньше, чем элементов в массиве, то значения передаются первым элементам, а остальные получают нулевые значения:

    int numbers[4] ; //

    Если значений в инициализаторе больше, чем элементов в массиве, то при компиляции возникнет ошибка:

    int numbers[4] ; // ! Ошибка

    Здесь массив имеет размер 4, однако ему передается 6 значений.

    Если размер массива не указан явно, то он выводится из количества переданных значений:

    int numbers[] ;

    В данном случае в массиве есть 6 элементов.

    При этом не допускается присвоение одному массиву другого массива:

    int nums1[] ; int nums2[] = nums1; // ошибка

    Индексы. Получение и изменение элементов массива

    После определения массива мы можем обратиться к его отдельным элементам по индексу. Индексы начинаются с нуля, поэтому для обращения к первому элементу необходимо использовать индекс 0. Обратившись к элементу по индексу, мы можем получить его значение, либо изменить его. Например, получим второй элемент (индекс 1):

    int n = numbers[1];

    Изменение значения второго элемента:

    numbers[1] = 123;

    Например, получим и изменим значения элементов:

    #include int main() < int numbers[4]; int first = numbers[0]; // получаем первый элемент std::cout 

    При обращении по индексу следует учитывать, что мы не можем обратиться по несуществующему индексу. Так, если в массиве 4 элемента, то мы можем использовать индексы с 0 до 3 для обращения к его элементам. Использование любого другого индекса приведет к ошибке:

    int numbers[4]; int forth = numbers[4]; // !Ошибка - в массиве только 4 элемента

    Константные массивы

    Если необходимо, чтобы нельзя было изменять значения элементов массива, то такой массив можно определить как константный с помощью ключевого слова const

    const int numbers[4]; // numbers[1] = 23; // ошибка - значения элементов массива изменить нельзя

    Длина массива

    Длина массива не всегда бывает известна. Однако может потребоваться получить ее. Для этого можно использовать несколько способов. Первый способ, который пришел из языка С, представляет применение оператора sizeof :

    #include int main() < int numbers[]; std::cout 

    По сути длина массива равна совокупной длине его элементов. Все элементы представляют один и тот же тип и занимают один и тот же размер в памяти. Поэтому с помощью выражения sizeof(numbers) находим длину всего массива в байтах, а с помощью выражения sizeof(numbers[0]) - длину одного элемента в байтах. Разделив два значения, можно получить количество элементов в массиве.

    Второй способ представляет применение встроенной библиотечной функции std::size() :

    #include int main() < int numbers[]; int count = std::size(numbers); std::cout 

    Перебор массивов

    Используя циклы, можно пробежаться по всему массиву и через индексы обратиться к его элементам:

    #include int main() < const int n = 4; int numbers[n] ; for(int i=0; i < n; i++) < std::cout >

    Чтобы пройтись по массиву в цикле, надо знать его длину. Здесь длина задана константой n.вначале надо найти длину массива. И в цикле for перебираем все элементы, пока счетчик i не станет равным длине массива. В итоге на консоль будут выведены все элементы массива:

    11 12 13 14

    Другой пример - вычислим сумму элементов массива:

    #include int main() < int numbers[]; int sum <>; for (int i <>; i < std::size(numbers); sum += numbers[i++]); std::cout 

    Здесь длина массива вычисляется динамически - с помощью функции std::size() .

    Перебор элементов в стиле for-each

    Используем другую форму цикла for , которая предназначена специально для перебора последовательностей, в том числе для массивов

    #include int main() < int numbers[4] ; for(int n : numbers) < std::cout >

    При переборе массива каждый перебираемый элемент будет помещаться в переменную number, значение которой в цикле выводится на консоль.

    Если нам неизвестен тип объектов в массиве, то мы можем использовать спецификатор auto для определения типа:

    for(auto n : numbers)

    Ввод значений массива с консоли

    Подобно тому, как вводятся данные для отдельных переменных, можно вводить значения для отдельных элементов массива. Например, пусть пользователь вводит значения числового массива:

    #include int main() < const int max ; // максимальная длина массива - не больше 6 чисел int numbers[max]; // массив для ввода чисел int i<>; // счетчик введенных чисел std::cout > numbers[i]; // вводим число i++; > // выводим массив for (i =0; i < max; ++i) < std::cout std::cout

    Здесь в цикле сначала вводятся шесть чисел для каждого элемента массива, затем выводим этот массив.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

https://kapelnicza.vyvod-iz-zapoya-v-stacionare-samara12.ru/