Компьютерный журнал
4 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд

Php количество элементов в массиве


(PHP 4, PHP 5, PHP 7)

count — Подсчитывает количество элементов массива или чего-либо в объекте


Подсчитывает количество элементов массива или чего-то в объекте.

Для объектов, если у вас включена поддержка SPL, вы можете перехватить count() , реализуя интерфейс Countable. Этот интерфейс имеет ровно один метод, Countable::count() , который возвращает значение функции count() .

Смотрите раздел Массивы в этом руководстве для более детального представления о реализации и использовании массивов в PHP.

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

Массив или объект, реализующий Countable.

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

count() умеет определять рекурсию для избежания бесконечного цикла, но при каждом обнаружении выводит ошибку уровня E_WARNING (в случае, если массив содержит себя более одного раза) и возвращает большее количество, чем могло бы ожидаться.

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

Возвращает количество элементов в array_or_countable . Если параметр не является массивом или объектом, реализующим интерфейс Countable, будет возвращена 1. За одним исключением: если array_or_countable — NULL , то будет возвращён .


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

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

Пример #2 Пример рекурсивного использования count()

array( ‘orange’ , ‘banana’ , ‘apple’ ),
‘veggie’ => array( ‘carrot’ , ‘collard’ , ‘pea’ ));

// рекурсивный подсчет
echo count ( $food , COUNT_RECURSIVE ); // выводит 8

// обычный подсчет
echo count ( $food ); // выводит 2

Список изменений

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

  • is_array() — Определяет, является ли переменная массивом
  • isset() — Определяет, была ли установлена переменная значением, отличным от NULL
  • empty() — Проверяет, пуста ли переменная
  • strlen() — Возвращает длину строки
  • is_countable() — Проверить, что содержимое переменной является счетным значением

User Contributed Notes 16 notes

[Editor’s note: array at from dot pl had pointed out that count() is a cheap operation; however, there’s still the function call overhead.]

If you want to run through large arrays don’t use count() function in the loops , its a over head in performance, copy the count() value into a variable and use that value in loops for a better performance.

My function returns the number of elements in array for multidimensional arrays subject to depth of array. (Almost COUNT_RECURSIVE, but you can point on which depth you want to plunge).

For a Non Countable Objects

$count = count($data);
print «Count: $countn»;

Warning: count(): Parameter must be an array or an object that implements Countable in example.php on line 159

#Quick fix is to just cast the non-countable object as an array..

$count = count((array) $data);
print «Count: $countn»;

to end the debate: count() is the same as empty()

test code below:

results on my computer:

count : double(0.81396999359131)
empty : double(0.81621310710907)

using isset($test[0]) is a bit slower than empty;
test without adding value to the array in function ****Test: still the same.

You can not get collect sub array count when there is only one sub array in an array:

$a = array ( array (‘a’,’b’,’c’,’d’));
$b = array ( array (‘a’,’b’,’c’,’d’), array (‘e’,’f’,’g’,’h’));

echo count($a); // 4 NOT 1, expect 1
echo count($b); // 2, expected

All the previous recursive count solutions with $depth option would not avoid infinite loops in case the array contains itself more than once.
Here’s a working solution:

// you need to unset it when done because you’re working with a reference.
unset( $arr [ ‘__been_here’ ]);
return $count ;

If you are on PHP 7.2+, you need to be aware of «Changelog» and use something like this:

You can organize your code to ensure that the variable is an array, or you can extend the Countable so that you don’t have to do this check.

Get maxWidth and maxHeight of a two dimensional array.

1st dimension = Y (height)
2nd dimension = X (width)
e.g. rows and cols in database result arrays

So for Y (maxHeight)

And for X (maxWidth)

I actually find the following function more useful when it comes to multidimension arrays when you do not want all levels of the array tree.

If you want to know the sub-array containing the MAX NUMBER of values in a 3 dimensions array, here is a try (maybe not the nicest way, but it works):

function how_big_is_the_biggest_sub ($array) <
// we parse the 1st level
foreach ($array AS $key => $array_lvl2) <
//within level 2, we count the 3d levels max
$lvl2_nb = array_map( ‘count’, $array_lvl2) ;
$max_nb = max($lvl2_nb);
// we store the matching keys, it might be usefull
$max_key = array_search($max_nb, $lvl2_nb);
$max_nb_all[$max_key.’|’.$key] = $max_nb;
// now we want the max from all levels 2, so one more time
$real_max = max($max_nb_all);
$real_max_key = array_search($real_max, $max_nb_all);
list($real_max_key2, $real_max_key1) = explode(‘|’, $real_max_key);
// preparing result
$biggest_sub[‘max’] = $real_max;
$biggest_sub[‘key1’] = $real_max_key1;
$biggest_sub[‘key2’] = $real_max_key2;

return $biggest_sub;
$cat_poids_max[‘M’][‘Juniors’][] = 55;
$cat_poids_max[‘M’][‘Juniors’][] = 61;
$cat_poids_max[‘M’][‘Juniors’][] = 68;
$cat_poids_max[‘M’][‘Juniors’][] = 76;
$cat_poids_max[‘M’][‘Juniors’][] = 100;

$cat_poids_max[‘M’][‘Seniors’][] = 55;
$cat_poids_max[‘M’][‘Seniors’][] = 60;
$cat_poids_max[‘M’][‘Seniors’][] = 67;
$cat_poids_max[‘M’][‘Seniors’][] = 75;
$cat_poids_max[‘M’][‘Seniors’][] = 84;
$cat_poids_max[‘M’][‘Seniors’][] = 90;
$cat_poids_max[‘M’][‘Seniors’][] = 100;
$cat_poids_max[‘F’][‘Juniors’][] = 52;
$cat_poids_max[‘F’][‘Juniors’][] = 65;
$cat_poids_max[‘F’][‘Juniors’][] = 74;
$cat_poids_max[‘F’][‘Juniors’][] = 100;

$cat_poids_max[‘F’][‘Seniors’][] = 62;
$cat_poids_max[‘F’][‘Seniors’][] = 67;
$cat_poids_max[‘F’][‘Seniors’][] = 78;
$cat_poids_max[‘F’][‘Seniors’][] = 86;
$cat_poids_max[‘F’][‘Seniors’][] = 100;
$biggest_sub = how_big_is_the_biggest_sub($cat_poids_max);
echo »
«.$biggest_sub[‘key1’].» ==> «.$biggest_sub[‘key2’].» ==> «.$biggest_sub[‘max’]; // displays : M ==> Seniors ==> 7

Php количество элементов в массиве

Меняет местами индексы и значения массива.

Эта функция «пробегает» по массиву и меняет местами его ключи и значения. Исходный массив arr не изменяется, а результирующий массив просто возвращается. Если в массиве присутствовало несколько элементов с одинаковыми значениями, учитываться будет только последний из них.

Значения массива arr должны быть либо целыми числами, либо строковыми значениями. Иначе пара ключ / значение не будут обработаны.

Функция array_flip() возвратит FALSE, если обработка массива вызвала ошибку.

Читать еще:  Noresize в html

Пример использования функции array_flip():

Пример использования функции array_flip():

Приведенный выше пример выведет следующее:

Функция поддерживается PHP 4, PHP 5

Функция устанавливает значения ключей массива в верхний или нижний регистр.

Функция array_change_key_case() возвращает исходный массив arr, ключи которого преобразованы в верхний или нижний регистр.
Необязательный параметр registr может принимать следующие значения:
CASE_LOWER — все ключи массива преобразуются в нижний регистр (значение по умолчанию);
CASE_UPPER — в верхний регистр.
Данная функция не изменяет ключи, состоящие из чисел.
Пример использования функции array_change_key_case():

Пример выведет следующее:

Функция поддерживается PHP 4 >= 4.2.0, PHP 5

Функция объединяет два массива, причем значения первого становяться ключами, а значения второго — значениями.

Функция array_combine() возвращает массив, ключами которого являются значения массива keys, а значениями — значения массива values.
Функция возвратит FALSE, если размерность массивов keys и values не совпадают, или эти массивы не содержат значений.
Пример использования функции array_combine():

Пример выведет следующее:

Функция поддерживается PHP 5

Проверка существования заданного ключа в массиве.

Функция array_key_exists() возвратит TRUE, если в массиве search присутствует элемент с индексом key.
В противном случае возвратит FALSE.

Пример использования функции array_key_exists():

В PHP 4.0.6. имя этой функции key_exists().

Функция поддерживается PHP 4 >= 4.0.1, PHP 5

Вычислить произведение значений массива (PHP 5 >= 5.1.0RC1)

array_product() возвращает произведение значений массива как целое число или число с плавающей точкой.

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

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

Итеративно уменьшить массив к единственному значению, используя функцию обратного вызова (PHP 4 >= 4.0.5, PHP 5)

array_reduce() итеративно применяет функцию function к элементам массива input и, таким образом, сводит массив к единственному значению. Если указан дополнительный параметр initial, он будет использован в начале процесса, или в качестве окончательного результата, если массив пуст.

В результате переменная $b содержит 15, $c содержит 1200 (= 1*2*3*4*5*10), и $d содержит 1.

Рекурсивно применить пользовательскую функцию к каждому элементу массива (PHP 5)

Применяет пользовательскую функцию funcname к каждому элементу массива input. Эта функция обрабатывает каждый элемент многомерного массива. Обычно у функции funcname два параметра. Значение массива array в качестве первого параметра, и ключ/индекс в качестве второго. Если указан дополнительный параметр userdata, он будет передан в качестве третьего параметра в функцию обратного вызова funcname.

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Замечание: Если требуется, чтобы функция funcname изменила значения в массиве, определите первый параметр funcname как ссылку. Тогда все изменения будут применены к элементам массива.

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

Вывод вышеприведённой программы:

Обратите внимание, что ключ ‘sweet’ никогда не отображается. Никакой ключ, соответствующий значению типа array, не будет передан в функцию.

Возвращает список из ключей массива.

Функция возвращает массив, значениями которого являются все строковые и числовые ключи массива arr. Если задан необязательный параметр search_value, то она вернет только те ключи, которым соответствуют значению search_value.
Пример испольльзования функции array_keys():

Приведенный выше пример выведет следующее:

Функция array_keys() появилась в PHP 4.

Ее эквивалент для PHP 3:

Функция поддерживается PHP 4, PHP 5

Удаление ассоциативных индексов массива.

Функция array_values() возвращает список всех значений в ассоциативном массиве arr. При этом она заменяет все строковые ключи на числовые.
Пример использования функции array_values():

Этот пример выведет:

Функция поддерживается PHP 4, PHP 5

Осуществляет проверку массива на наличие значения.

Функция in_array() возвратит TRUE, если в массиве haystack содержится элемент со значением needle, и FALSE в противном случае.
Если установить третий необязательный параметр strict в значение TRUE, то функция in_array() при проверке также будет сравнивать типы значений.
Замечание: Если параметр needle является строкой, то при сравнении регистр символов учитывается.
Замечание: В PHP версии ниже 4.2.0 параметр needle не мог быть массивом.
Пример использования функции in_array():

Второе условие не сработает, т.к. поиск в массиве идет с учетом регистра.
Пример выведет:

Пример использования функции in_array(): Использование параметра strict

Функция поддерживается PHP 4, PHP 5

Возвращает количество значений массива.

Эта функция подсчитывает, сколько раз каждое значение встречается в массиве arr, и возвращает ассоциативный массив с ключами —
элементами массива и значениями — количеством повторов этих элементов. Иными словами, функция array_count_values()
подсчитывает частоту появления значений в массиве arr.
Пример использования функции array_count_values():

Пример выведет следующее:

Функция поддерживается PHP 4, PHP 5

Возвращает число элементов массива.

Функция sizeof() возвращает количество элементов в массиве arr на подобие действия функции count().

Возвращает число элементов в массиве или объекте.

Функция count() возвращает число элементов в массиве или объекте var. В случае, если var — скалярная переменная, то функция возвращает 1, если такая переменная существует, или 0, если такой переменной нет.
Надо отметить, что 0 возвращается и тогда, когда указан массив, не содержащий элементов (NULL).

Если задан необязательный параметр mode, то будет подсчитано общее количество элементов в массиве. Это может быть полезно при нахождении количества элементов в многомерных массивах.
Пример использования функции count():

Пример использования функции count(): (PHP >= 4.2.0)

Функция поддерживается PHP 3, PHP 4, PHP 5

Возвращает сумму всех элементов массива.

Функция array_sum() возвращает сумму всех числовых элементов массива. От типа значений в массиве зависит тип возвращаемого числа (integer или float).

Пример использования функции array_sum():

Этот пример выведет следующее:

Функция поддерживается PHP 4 >=4.0.4, PHP 5

Производит случайную выборку индексов массива.

Функция array_rand() будет полезной, если вы хотите выбрать одно или несколько случайных значений из массива. Эта функция возвращает в массиве выбранные случайным образом индексы элементов массива arr.
Аргумент num_req указывает число возвращаемых индексов. В случае, если выбирается один элемент, то функция array_rand() возвратит случайный ключ в виде значения.
Пример использования функции array_rand():

Читать еще:  C template html

Использование многомерных массивов в PHP

Элементы массива в PHP могут содержать значения любого типа, такие как числа, строки, объекты. Они также могут содержать и другие массивы, что фактически означает создание многомерного или вложенного массива.

В данном уроке рассматриваются многомерные (вложенные) массивы PHP. Объясняется, как их создать, как ими манипулировать, как организовать цикл по всему многомерному массиву в PHP.

Как создать многомерный массив

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

В выше приведённом примере создаётся двумерный массив. Массив верхнего уровня содержит 3 элемента. Каждый элемент также является массивом, содержащим 3 значения.

Также можно использовать ассоциативный массив в качестве многомерного массива. Следующий пример демонстрирует создание индексированного массива, который содержит 3 ассоциативных массива:

Можно вкладывать массивы один в другой настолько глубоко, насколько нужно (хотя на практике глубина вложенности редко бывает больше 3-х уровней). В примере ниже демонстрируется 3-х мерный массив:

Доступ к элементам в многомерном массиве

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

А вот пример, который демонстрирует доступ к различным элементам многомерного массива $movies , который мы создали раньше:

Выполнение кода выдаст следующий результат:

Последний пример использует $movies[0] для организации доступа ко всему вложенному массиву в первом элементе массива верхнего уровня, а затем используется функция print_r() для вывода содержимого массива.

Организация перебора всех элементов многомерного массива в цикле

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

  1. Внешний цикл берет каждый элемент массива верхнего уровня..
  2. Для каждого элемента верхнего уровня внутренний цикл перебирает вложенный массив, и так далее.

В примере создаётся 2-у мерный массив с информацией по фильмам, а затем организуется цикл по элементам массива для вывода информации на страницу:

Выполнение данного кода выдаст следующий результат:


Многомерные массивы подходят для хранения любых данных, например, для хранения множественных записей баз данных или значений для отображения в таблицах. Использование многомерных массивов может повысить уровень функциональности скриптов PHP.

Данный урок подготовлен для вас командой сайта
Источник урока:
Перевел: Сергей Фастунов
Урок создан: 30 Июля 2010
Просмотров: 144074
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Массивы и списки в PHP

Ассоциативные массивы в PHP

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

Массивы, индексами которых являются строки, называются ассоциативными. Индексы ассоциативных массивов называются ключами. Пример ассоциативного массива:


Доступ к элементам ассоциативных массивов осуществляется так же, как и к элементам обыкновенных массивов, и называется доступом по ключу:

echo $People[«Иванов»];

Списки в PHP

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

Не знаю как вам, но мне удобнее создавать списки без указания индекса — пусть это сделает за меня PHP. Ведь я могу ненароком указать уже существующий индекс. Кроме того, такое автоматическое создание массивов удобно при записи текстового файла в массив для последующей обработки.

Вот пример автоматического создания массива:


При этом PHP начнет нумерацию с наименьшего незанятого значения индекса. В частности, если переменная $People только сейчас инициализируется, то нумерация будет начата с нуля. В дальнейшем, с каждым новым элементом массива индекс будет увеличиваться на единицу.

Как видите все просто и удобно — не нужно указывать индексы. Однако, это как раз тот случай, когда мы не знаем точного числа элементов в массиве.

Соответственно, при работе с такими массивами целесообразно использовать функцию count(), которая определяет количество элементов в массиве.

Рассмотрим небольшой пример — чтение текстового файла в массив. Функция fopen() используется для открытия файла, функция feof() истинна, если достигнут конец файла, а функция fgets() читает строку из файла.

При работе с файлами мы не знаем, сколько строк будет содержать конкретный файл. Программируя на C или Pascal, нам нужно было бы создать динамический список, что вызывает проблемы у начинающих программистов, не знакомых с принципами работы с динамической памятью. В PHP все просто — вы можете добавить сколько угодно элементов в массив, не указывая их номера. Новые элементы массива будут добавлены в конец массива.

Читать еще:  Html context menu

Массивы в PHP

Массив — это упорядоченный набор данных. Каждый элемент массива имеет индекс или ключ. Индекс (ключ) служит для однозначной идентификации элемента внутри массива. В одном массиве не может быть двух элементов с одинаковыми индексами.

Работать без массива не очень удобно, думаю, вы и сами это понимаете. Существует ряд задач, где без использования массива просто не обойтись. Примером может послужить простой список друзей. Не будете же вы создавать 20 переменных, содержащих имена ваших друзей? Гораздо рациональнее создать один массив, содержащий 20 элементов.

Если вы программировали на C или Pascal, то знаете, что длина массива ограничена. При этом, если вы наперед не знаете, сколько элементов будет содержать ваш массив, значит вам нужно использовать динамические структуры (список, стек, очередь). В PHP все гораздо проще — длину массива не нужно задавать при объявлении массива, длина будет автоматически увеличена при добавлении нового элемента в массив. Все это становится возможным только благодаря тому, что PHP — интерпретатор, а не компилятор.

Очень важной особенностью PHP является то, что он, в отличие от других языков, позволяет создавать массивы любой сложности непосредственно в теле программы (сценария). Это бывает очень полезным, когда требуется создать массив, на основе некоторых, заранее неизвестных параметров.

Рассмотрим простейший способ инициализации массива:


PHP узнает о том, что создается массив по квадратным скобкам. В квадратных скобках указывается индекс (ключ) отдельного элемента массива. В приведенном примере мы объявили массив $People, состоящий из четырех элементов. Однако в дальнейшем нам никто не помешает инициализировать еще один (или сколько нужно) новый элемент массива. В PHP размер массива не задается явно, как в других языках программирования.

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

echo $People [1];

Зная количество элементов массива, мы можем вывести все элементы массива с помощью цикла:

for ($i=0; $i

Если мы не знаем точное количество элементов массива, можно использовать функцию count(). Эта стандартная функция определяет размер массива, то есть количество элементов в нем. Соответственно, с использованием функции count() вышеприведенный цикл выглядит следующим образом:

Как определить количество элементов в массиве PHP?

Количество элементов в массиве PHP предлагается определять функцией count(). В большинстве случаев это простой и практичный способ. Обычный сайт не требует особой логики, не содержит сложных систем объектов, поэтому использования функции count() будет достаточно.

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

Синтаксис и использование функции count()

Результат функции — количество элементов, содержащихся в массиве, которые переданы в качестве параметра. Ниже представлен пример PHP: подсчет количества элементов в массиве.

Первоначально был создан массив из 13 случайных элементов. Каждый элемент — строка символов различного содержания и длины. Затем было удалено два элемента и добавлен один. По логике 13 — 2 + 1 = 12, но функция count() считает иначе. Ниже приведен код вывода этого результата.

Поскольку был добавлен массив, то число элементов должно было увеличиться на количество элементов этого массива. Понятно, что цель функции count() — посчитать количество элементов в массиве. PHP меньше всего интересует, что элементами массива могут быть тоже массивы. Но в прикладном отношении далеко не всегда элементы массива включают в себя разнородные другие массивы.

Особенности структурирования данных

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

Один массив будет всегда лучшим решением, но в нем может быть как строчная строка — «ананас», так и совокупность строк — «сорт яблок» или «сорт груш». Строк может быть множество, все зависит от:

Но смысл строки всего массива и строки подмассива всегда будет один. В таком представлении данных количество элементов в массиве PHP не определить по своей логике. Здесь массив должен иметь собственный функционал для определения количества. Функции count() не свойственна рекурсия, и ее использование для определения точного количества элементов — не гарантия точного результата.

Объекты и массивы

Массивы — несомненное качество и эффективность для представления данных. Особенно эффективно использование массивов в качестве коллекций объектов. Классический цикл перебора элементов массива или работа в стиле стека: только с первым элементом или только с последним (после использования элемент удаляется, но становится доступным следующий или предыдущий). Не важно, как работать с коллекцией объектов, но всегда каждому элементу такой коллекции можно назначить собственную функцию определения количества.

Тогда, не используя функцию count(), количество элементов в массиве PHP можно определить через последовательный вызов метода каждого элемента в массиве. Формально такая логика имеет под собой основание: есть ассортимент фруктов, поставляемых в магазин, но как быть, если ассортимент увеличится, и к ананасам, яблокам и грушам добавятся сливы? Как быть, если помимо фруктов магазин начнет продавать овощи?

Представим ассортимент как объект, в который входят:

  • фрукты;
  • овощи;
  • возможность добавления любого товара.

Можно получить три уровня иерархии объектов, и тогда можно будет определить не только количество элементов в массиве. PHP позволит посчитать количество товара, его стоимость, определить время продажи по условиям годности и др. Использование данных в виде объектов позволяет придать им нужное качество, от которого всегда легко получить точное количество.

Ссылка на основную публикацию