как узнать размер массива в php
Длина строки и массива в PHP
Привет. В PHP довольно часто приходится работать со строками и массивами и почти во всех случаях требуется узнать их длину (length). Вполне типичная ситуация и для нее есть встроенные функции в PHP. Но есть некоторые нюансы, к примеру то, что одна из функций, которая показывает длину строки — srtlen считает не количество символов в тексте, а количество байт, который занимает каждый символ. Если латинский символ занимает 1 байт, то на кириллице он займет 2 байта. Об этом я же упоминал в статье по теме: как обрезать текст по количеству слов и символов. Но сейчас постараемся рассмотреть некоторые примеры более детально.
Узнать длину строки в PHP
Первая функция, которая будет вычислять длину строки в PHP, будет strlen.
$str = «Hello World»; echo strlen($str); // 11 символов вместе с пробелом
А если мы напишем примерно то же самое, но на русском, то получим такой вариант:
$str = «Привет Мир»; echo strlen($str); // 19 символов вместе с пробелом
В этом случае, как я уже говорил ранее, каждый символ займет 2 байта + 1 байт — это пробел. В итоге мы получим не совсем то, что ожидали. Поэтому в случае с кириллицей, чтобы определить длину строки, следует использовать другие функции. Первая — mb_strlen
$str = «Привет Мир»; echo mb_strlen($str); // 10 символов вместе с пробелом
В этом случае подсчет символов в строки будет одинаковым как на английском, так и на русском языках. Даже если символ занимает несколько байт, то будет посчитан, как один. Так же есть еще одна функция, чтобы узнать длину строки в символах — iconv_strlen
$str = «Привет Мир»; echo iconv_strlen($str); // 10 символов вместе с пробелом
iconv_strlen учитывает кодировку строки, ее можно указать вторым параметром. Если она не указана, то кодировка будет внутренней. То есть самого файла.
echo iconv_strlen($str, «UTF-8»);
Если возникла необходимость проверить длину строки без пробелов, то потребуется дополнительная функция str_replace
Узнать длину массива в PHP
функция, которая позволяет узнать длину массива в PHP — count.
То же самое будет с массивом, где есть ключи и значения.
strlen() | Подсчет количества байт в строке |
mb_stren() | Подсчет символов в строке |
iconv_strlen() | Подсчет символов строки с учетом кодировки |
count() | Подсчет элементов массива |
На этом можно завершить. Теперь вы можете самостоятельно узнать длину строки в PHP и определить длину массива. А если возникнут вопросы, задавайте их в комментариях.
count
(PHP 4, PHP 5, PHP 7, PHP 8)
count — Подсчитывает количество элементов массива или чего-либо в объекте
Описание
Подсчитывает количество элементов массива или чего-то в объекте.
Смотрите раздел Массивы в этом руководстве для более детального представления о реализации и использовании массивов в PHP.
Список параметров
Если необязательный параметр mode установлен в COUNT_RECURSIVE (или 1), count() будет рекурсивно подсчитывать количество элементов массива. Это особенно полезно для подсчёта всех элементов многомерных массивов.
count() умеет определять рекурсию для избежания бесконечного цикла, но при каждом обнаружении выводит ошибку уровня E_WARNING (в случае, если массив содержит себя более одного раза) и возвращает большее количество, чем могло бы ожидаться.
Возвращаемые значения
Список изменений
Примеры
Пример #1 Пример использования count()
Результат выполнения данного примера:
var_dump ( count ( null ));
var_dump ( count ( false ));
?>
Результат выполнения данного примера:
Результат выполнения данного примера в PHP 7.2:
Результат выполнения данного примера в PHP 8:
Пример #3 Пример рекурсивного использования count()
Смотрите также
User Contributed Notes 17 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 are on PHP 7.2+, you need to be aware of «Changelog» and use something like this:
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).
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.
$arr [ ‘__been_here’ ] = true ;
to end the debate: count() is the same as empty()
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.
A function of one line to find the number of elements that are not arrays, recursively :
Get maxWidth and maxHeight of a two dimensional array.
Note:
1st dimension = Y (height)
2nd dimension = X (width)
e.g. rows and cols in database result arrays
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
For a Non Countable Objects
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..
As I see in many codes, don’t use count to iterate through array.
Onlyranga says you could declare a variable to store it before the for loop.
I agree with his/her approach, using count in the test should be used ONLY if you have to count the size of the array for each loop.
You can not get collect sub array count when use the key on only one sub array in an array:
$a = array(«a»=>»appple», b»=>array(‘a’=>array(1,2,3),’b’=>array(1,2,3)));
$b = array(«a»=>»appple», «b»=>array(array(‘a’=>array(1,2,3),’b’=>array(1,2,3)), array(1,2,3),’b’=>array(1,2,3)), array(‘a’=>array(1,2,3),’b’=>array(1,2,3))));
echo count($a[‘b’]); // 2 NOT 1, expect 1
echo count($b[‘b’]); // 3, expected
To get the count of the inner array you can do something like:
$inner_count = count($array[0]);
echo ($inner_count);
About 2d arrays, you have many way to count elements :
Criada para contar quantos níveis um array multidimensional possui.
/* Verifica se o ARRAY foi instanciado */
if (is_setVar($matrix))<
/* Verifica se a variável é um ARRAY */
if(is_array($matrix))<
In special situations you might only want to count the first level of the array to figure out how many entries you have, when they have N more key-value-pairs.
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):
$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;
Сегодня мы рассмотрим массивы в PHP. Мы расскажем об их синтаксисе, различных типах, встроенных функциях для работы с массивами. А также приведем практические примеры того как можно использовать массивы в PHP.
Но прежде я расскажу вам интересную историю.
Рядом с моим офисом есть магазин DVD с отличной подборкой английских фильмов. Владелец магазина не очень образованный человек, но все же он может легко найти нужный фильм среди 20 тысяч дисков. Как он это делает?
Я проанализировал его стратегию. Владелец магазина классифицировал все DVD-диски по разным жанрам, а также указал специальные идентификаторы / коды для разных полок. Он держит похожие фильмы на одних полках. Каждая полка маркируется по названию категории, например, Romantic Movies, Horror Movies и т. д.. Каждый DVD имеет уникальный идентификатор, который можно использовать для отслеживания.
Поэтому, если вы когда-нибудь откроете свой магазин DVD, сделайте следующее:
Теперь о морали этой истории, которая позволит нам вернуться к миру компьютеров.
Иногда в программировании нужно обрабатывать связанные значения, которые соотносятся друг с другом по-разному. Например, имена пяти лучших учеников, модели автомобилей Porsche, переменные, представленные в определенной форме и т. д. В таких случаях необходимо организовать код и логику для эффективного и быстрого управления ими. Для этого можно использовать логику продавца DVD:
1. Организуйте данные в различные категории.
2. Определите ряды (строки).
3. Назначьте уникальные идентификаторы для каждого значения данных.
Простое определение массивов: блок, который помогает объединить схожие данные одного и того же типа для лучшей организации и обработки.
Массивы в PHP — корректное определение
«Набор различных переменных с одной меткой, позволяющий организовать значения для их более простой обработки».
Это мое собственное определение массивов. Хотя некоторые определяют их как «переменную, которая содержит в себе другие переменные».
Синтаксис массива PHP:
Затем идут значения в круглых скобках, и каждое из них заключено в двойные кавычки и разделено запятой.
Пример того как определяются и выводятся массивы в PHP:
Результат приведенной выше программы будет следующим:
Помните, что номер индекса начинается с 0, а не 1.
Каждое значение массива получает уникальный идентификатор, который известен как INDEX NUMBER.
Еще одним способом может быть определение трех переменных, присвоение им значений и использование разных операторов для их отображения. Это может быть приемлемым в случае трех значений, принимаемых аргументом. Но не подходит, когда мы имеем дело с полусотней или сотнями значений.
В приведенном выше примере мы определили массив и присвоили ему значения за один шаг. Хотя можно сделать это следующим образом:
Массивы в PHP — основные типы
В PHP существует три типа массивов:
Числовые массивы используют целое число в качестве номера индекса для идентификации каждого элемента. Примеры, которые мы рассматривали выше, это числовые массивы.В них в качестве индекса используются целочисленные значения.
Ассоциативный массив PHP
Иногда лучше использовать индексные имена вместо чисел. Например, если вы хотите сохранить имена и номера трех учеников.
и вы получите ассоциативный массив.
Ассоциативные массивы позволяют проще обрабатывать информацию, связанную со сложным представлением данных формы, динамическими значениями из базы данных и т. д.
Многомерный массив PHP
Многомерный массив PHP может содержать массивы внутри себя, а подмассивы могут включать в себя другие массивы.
Используем пример из реальной жизни. У Дэвида есть два сына — Ричи и Мейсон. У Ричи есть две дочери — Сью и Наташа, в то время как у Мейсона три дочери — Николь, Сальма и Эмбер. Их семейное древо выглядит следующим образом:
Если мы хотим отобразить семейное древо Дэвида используя многомерный массив PHP, то можем определить массив следующим образом:
Можно использовать многомерные массивы для организации данных. Попробуйте отправить массив полей формы, а затем вывести глобальный массив для проверки вывода, и вы получите глобальный многомерный массив, который будет включать в себя другие массивы.
Изучаем PHP: работа с массивами-цикл FOREACH
Цикл FOREACH используется, чтобы принимать каждое последующее значение массива и выполнять с ним требуемые действия.
Основной синтаксис цикла FOREACH следующий:
Напишем программу, используя цикл FOREACH:
Результатом работы приведенного выше кода:
Существуют и другие удобные функции для работы с массивами.
Массивы в PHP — функции работы с массивами
Сохранение вывода функции print_r
Ранее мы использовали print_r для отображения значений массива. Но можно добавить к print_r дополнительный аргумент и сохранить результат в переменной. Например:
Print_r будет отображать сам массив, если вы не используете TRUE — второй аргумент. Но, если указано TRUE, функция сохраняет вывод в переменной.
Как определить в php размер массива?
Если вы хотите определить php количество элементов в массиве, можно использовать функцию COUNT следующим образом:
Приведенный выше кода выводит 3, потому что в массиве есть три элемента.
Функция var_dump
Функция var_dump() отобразила, что массив имеет три значения, а также вывела длину каждой строки.
Функция var_export
Обратите внимание, что после последнего элемента добавляется дополнительная запятая. Но она игнорируется PHP, и вы можете скопировать и вставить эту информацию непосредственно в свои скрипты:
Функция array shift PHP
Она удаляет первый элемент из массива и сохраняет его в переменной.
Например, можно удалить Apples из массива, используемого в предыдущих примерах, и сохранить это значение в другой переменной:
Я также предлагаю вам изучить другие полезные функции, связанные с array_shift :
Для обработки массива нужно определить размер массива, как показано ниже:
Это отлично подходит для числовых массивов, которые имеют целочисленные индексы, но не работает для ассоциативных массивов.
PHP перебор массива с помощью функции list()
Все массивы имеют курсор. Его можно свободно перемещать. Курсор используется в цикле while в примере, приведенном выше. Сначала each() возвращает первый элемент, затем второй элемент, третий и т. д., пока не определит, что элементов больше не осталось. Тогда функция вернет значение false и завершит цикл.
Получение индекса и его значения
Если вы хотите считать имя индекса и его значение для каждого элемента массива, используйте цикл FOREACH следующим образом:
Цель этой статьи — дать представление о массивах и разных методах хранения и обработки информации в массивах. Но если у вас есть вопросы по массивам, пожалуйста, задавайте их в комментариях к этой статье.
Пожалуйста, оставляйте ваши комментарии по текущей теме статьи. Мы крайне благодарны вам за ваши комментарии, подписки, лайки, дизлайки, отклики!
array
(PHP 4, PHP 5, PHP 7, PHP 8)
array — Создаёт массив
Описание
Создаёт массив. Подробнее о массивах читайте в разделе Массивы.
Список параметров
Наличие завершающей запятой после последнего элемента массива, несмотря на некоторую необычность, является корректным синтаксисом.
Возвращаемые значения
Примеры
Последующие примеры демонстрируют создание двухмерного массива, определение ключей ассоциативных массивов и способ генерации числовых индексов для обычных массивов, если нумерация начинается с произвольного числа.
Пример #1 Пример использования array()
Пример #2 Автоматическая индексация с помощью array()
Результат выполнения данного примера:
Этот пример создаёт массив, нумерация которого начинается с 1.
Результат выполнения данного примера:
Как и в Perl, вы имеете доступ к значениям массива внутри двойных кавычек. Однако в PHP нужно заключить ваш массив в фигурные скобки.
Пример #4 Доступ к массиву внутри двойных кавычек
Примечания
Смотрите также
User Contributed Notes 38 notes
As of PHP 5.4.x you can now use ‘short syntax arrays’ which eliminates the need of this function.
So, for example, I needed to render a list of states/provinces for various countries in a select field, and I wanted to use each country name as an label. So, with this function, if only a single array is passed to the function (i.e. «arrayToSelect($stateList)») then it will simply spit out a bunch of » » elements. On the other hand, if two arrays are passed to it, the second array becomes a «key» for translating the first array.
Here’s a further example:
$countryList = array(
‘CA’ => ‘Canada’,
‘US’ => ‘United States’);
$stateList[‘CA’] = array(
‘AB’ => ‘Alberta’,
‘BC’ => ‘British Columbia’,
‘AB’ => ‘Alberta’,
‘BC’ => ‘British Columbia’,
‘MB’ => ‘Manitoba’,
‘NB’ => ‘New Brunswick’,
‘NL’ => ‘Newfoundland/Labrador’,
‘NS’ => ‘Nova Scotia’,
‘NT’ => ‘Northwest Territories’,
‘NU’ => ‘Nunavut’,
‘ON’ => ‘Ontario’,
‘PE’ => ‘Prince Edward Island’,
‘QC’ => ‘Quebec’,
‘SK’ => ‘Saskatchewan’,
‘YT’ => ‘Yukon’);
$stateList[‘US’] = array(
‘AL’ => ‘Alabama’,
‘AK’ => ‘Alaska’,
‘AZ’ => ‘Arizona’,
‘AR’ => ‘Arkansas’,
‘CA’ => ‘California’,
‘CO’ => ‘Colorado’,
‘CT’ => ‘Connecticut’,
‘DE’ => ‘Delaware’,
‘DC’ => ‘District of Columbia’,
‘FL’ => ‘Florida’,
‘GA’ => ‘Georgia’,
‘HI’ => ‘Hawaii’,
‘ID’ => ‘Idaho’,
‘IL’ => ‘Illinois’,
‘IN’ => ‘Indiana’,
‘IA’ => ‘Iowa’,
‘KS’ => ‘Kansas’,
‘KY’ => ‘Kentucky’,
‘LA’ => ‘Louisiana’,
‘ME’ => ‘Maine’,
‘MD’ => ‘Maryland’,
‘MA’ => ‘Massachusetts’,
‘MI’ => ‘Michigan’,
‘MN’ => ‘Minnesota’,
‘MS’ => ‘Mississippi’,
‘MO’ => ‘Missouri’,
‘MT’ => ‘Montana’,
‘NE’ => ‘Nebraska’,
‘NV’ => ‘Nevada’,
‘NH’ => ‘New Hampshire’,
‘NJ’ => ‘New Jersey’,
‘NM’ => ‘New Mexico’,
‘NY’ => ‘New York’,
‘NC’ => ‘North Carolina’,
‘ND’ => ‘North Dakota’,
‘OH’ => ‘Ohio’,
‘OK’ => ‘Oklahoma’,
‘OR’ => ‘Oregon’,
‘PA’ => ‘Pennsylvania’,
‘RI’ => ‘Rhode Island’,
‘SC’ => ‘South Carolina’,
‘SD’ => ‘South Dakota’,
‘TN’ => ‘Tennessee’,
‘TX’ => ‘Texas’,
‘UT’ => ‘Utah’,
‘VT’ => ‘Vermont’,
‘VA’ => ‘Virginia’,
‘WA’ => ‘Washington’,
‘WV’ => ‘West Virginia’,
‘WI’ => ‘Wisconsin’,
‘WY’ => ‘Wyoming’);
Функции для работы с массивами
Содержание
User Contributed Notes 14 notes
A simple trick that can help you to guess what diff/intersect or sort function does by name.
Example: array_diff_assoc, array_intersect_assoc.
Example: array_diff_key, array_intersect_key.
Example: array_diff, array_intersect.
Example: array_udiff_uassoc, array_uintersect_assoc.
This also works with array sort functions:
Example: arsort, asort.
Example: uksort, ksort.
Example: rsort, krsort.
Example: usort, uasort.
?>
Return:
Array ( [ 0 ] => Cero [ 1 ] => Uno [ 2 ] => Dos [ 3 ] => Cuatro [ 4 ] => Cinco [ 5 ] => Tres [ 6 ] => Seis [ 7 ] => Siete [ 8 ] => Ocho [ 9 ] => Nueve [ 10 ] => Diez )
Array ( [ 0 ] => Cero [ 1 ] => Uno [ 2 ] => Dos [ 3 ] => Tres [ 4 ] => Cuatro [ 5 ] => Cinco [ 6 ] => Seis [ 7 ] => Siete [ 8 ] => Ocho [ 9 ] => Nueve [ 10 ] => Diez )
?>
Updated code of ‘indioeuropeo’ with option to input string-based keys.
Here is a function to find out the maximum depth of a multidimensional array.
// return depth of given array
// if Array is a string ArrayDepth() will return 0
// usage: int ArrayDepth(array Array)
Short function for making a recursive array copy while cloning objects on the way.
If you need to flattern two-dismensional array with single values assoc subarrays, you could use this function:
to 2g4wx3:
i think better way for this is using JSON, if you have such module in your PHP. See json.org.
to convert JS array to JSON string: arr.toJSONString();
to convert JSON string to PHP array: json_decode($jsonString);
You can also stringify objects, numbers, etc.
Function to pretty print arrays and objects. Detects object recursion and allows setting a maximum depth. Based on arraytostring and u_print_r from the print_r function notes. Should be called like so:
I was looking for an array aggregation function here and ended up writing this one.
Note: This implementation assumes that none of the fields you’re aggregating on contain The ‘@’ symbol.
While PHP has well over three-score array functions, array_rotate is strangely missing as of PHP 5.3. Searching online offered several solutions, but the ones I found have defects such as inefficiently looping through the array or ignoring keys.