sizeof — Посчитать количество элементов массива или количество свойств объекта


Содержание

count

count — Считает количество элементов массива или количество свойств объекта

Описание

Считает количество элементов массива или количество свойств объекта.

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

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

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

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

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

Возвращает количество элементов в var, обычно являющейся array , так как все остальное обычно имеет только один элемент.

Если var не является массивом или объектом, реализующим интерфейс Countable, будет возвращена 1. За одним исключением: если varNULL, то будет возвращён .

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

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

Версия Описание
4.2.0 Добавлен необязательный параметр mode.

Примеры

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

[ 0 ] = 1 ;
$a [ 1 ] = 3 ;
$a [ 2 ] = 5 ;
$result = count ( $a );
// $result == 3

$b [ 0 ] = 7 ;
$b [ 5 ] = 9 ;
$b [ 10 ] = 11 ;
$result = count ( $b );
// $result == 3

$result = count ( null );
// $result == 0

$result = count ( false );
// $result == 1
?>

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

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

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

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

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

  • is_array() — Определяет, является ли переменная массивом
  • isset() — Устанавливает, определена ли переменная
  • strlen() — Возвращает длину строки

Sizeof — Посчитать количество элементов массива или количество свойств объекта

(PHP 3, PHP 4, PHP 5)

count — Посчитать количество элементов массива или количество свойств объекта

Описание int count ( mixed var [, int mode] )

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

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

Замечание: Дополнительный параметр mode был добавлен начиная с PHP 4.2.0.

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

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

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

Предостережение
[ 0 ] = 1 ;
$a [ 1 ] = 3 ;
$a [ 2 ] = 5 ;
$result = count ( $a );
// $result == 3

$b [ 0 ] = 7 ;
$b [ 5 ] = 9 ;
$b [ 10 ] = 11 ;
$result = count ( $b );
// $result == 3;

$result = count ( null );
// $result == 0;

$result = count ( false );
// $result == 1;
?>

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

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

// рекурсивный count
echo count ( $food , COUNT_RECURSIVE ); // output 8

// обычный count
echo count ( $food ); // output 2

Что быстрее count или sizeof в php

Сегодня разберёмся что быстрее count или sizeof для подсчёта количества элементов массива или количества свойств объекта. Официально sizeof() является псевдоним для count(). В интернете присутствует мнение что sizeof каким-то чудом работает быстрее. Так же видел тесты с «полезной» нагрузкой sprintf, давшие

15% перевеса sizeof.

Результаты тестирования count vs sizeof

Компьютер:

вызовов вpемя f1() вpемя f2() победил быстрее на
1 100 000 0.041816 0.026395 f2() 0.015421 с. 36.88 %
2 100 000 0.023391 0.023791 f1() 0.000400 с. 1.68 %
3 100 000 0.025050 0.023749 f2() 0.001301 с. 5.19 %
4 100 000 0.023350 0.024163 f1() 0.000813 с. 3.36 %
5 100 000 0.024200 0.024578 f1() 0.000378 с. 1.54 %
6 100 000 0.026105 0.024056 f2() 0.002049 с. 7.85 %
7 100 000 0.024488 0.025000 f1() 0.000512 с. 2.05 %
8 100 000 0.026682 0.025376 f2() 0.001306 с. 4.89 %
9 100 000 0.024023 0.025113 f1() 0.001090 с. 4.34 %
Всего: 900 000 0.239105 0.222221 f2() 0.016884 с. 7.06 %

Сервер:

вызовов вpемя f1() вpемя f2() победил быстрее на
1 100 000 0.074881 0.068309 f2() 0.006572 с. 8.78 %
2 100 000 0.066697 0.067162 f1() 0.000465 с. 0.69 %
3 100 000 0.080173 0.067752 f2() 0.012421 с. 15.49 %
4 100 000 0.066335 0.063856 f2() 0.002479 с. 3.74 %
5 100 000 0.067766 0.061459 f2() 0.006307 с. 9.31 %
6 100 000 0.060933 0.061330 f1() 0.000397 с. 0.65 %
7 100 000 0.061232 0.061206 f2() 0.000026 с. 0.04 %
8 100 000 0.070526 0.064373 f2() 0.006153 с. 8.72 %
9 100 000 0.064442 0.064127 f2() 0.000315 с. 0.49 %
Всего: 900 000 0.612985 0.579574 f2() 0.033411 с. 5.45 %

Как видим писутствует странная магия в php: sizeof работает быстрее count, данным миф подтверждён.

Карта сайта
Отслеживать изменения в Твиттере
Политика конфиденциальности

Браузер построил за сек.
Полное время сек.

lsreg’s IT blog

Для вычисления на javascript размера массива объектов используется свойство массива length.

Массивы в javascript могут иметь пропуски в индексах. Например

Свойство length возвращает максимальный индекс массива + 1. Т.е. в приведенном примере length = 5.

Вычисление на javascript количества элементов в массиве

Если нужно посчитать количество реально существующих элементов массива, нужно воспользоваться следующей функцией:

Так же в свойство length можно присваивать значение. Это позволяет уменьшить длину существующего массива.

Вычисление на javascript размера массива в байтах

Массивы являются обычными объектами, так что вычисление размера массива в байтах ничем не отличается от вычисления размера любого другого объекта. К сожалению, javascript не предоставляет API для вычисления размера, так что придется считать самостоятельно. Делается это следующим образом: обходим все свойства объекта, если свойство примитивного типа — добавляем к общему результату размер экземпляра этого типа, если в свойстве лежит объект — рекурсивно считаем его размер.

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

Количество элементов массива в C++

Допустим у меня есть массив arr . Когда бы следующее не давало количество элементов массива: sizeof(arr) / sizeof(arr[0]) ?

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

Я прав и есть (я почти уверен, что там должны be) другие такие случаи?

извините за тривиальный вопрос, я Java dev, и я довольно новичок в С.++

9 ответов

Допустим у меня есть массив arr. Когда бы не дать количество элементов массива: оператор sizeof(Арр) / размер(модуль arr[0])?

одна вещь, которую я часто видел, новые программисты делают это:

так что новые программисты думают значение count будет 10. Но это неправильно.

даже это не так:

это все потому, что как только вы передаете массив любой из этих функций, он становится указатель тип, и так sizeof(arr) даст размер указатель, а не массив!

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

массивы на C++ сильно отличаются от массивов на Java тем, что они полностью неуправляемы. Компилятор или время выполнения понятия не имеют, какой размер массива.

информация известна только во время компиляции, если размер определяется в декларации:

в этом случае sizeof(array) дает вам правильный размер.

Если вы используете указатель в качестве массива, однако, «массив» будет просто указателем, а sizeof не даст вам никаких информация о фактическом размере массива.

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

нет случаев, когда, учитывая массив arr , что значение sizeof(arr) / sizeof(arr[0]) не является количеством элементов, по определению массива и sizeof .

на самом деле, это даже прямо упоминается (§5.3.3 / 2):

. При применении к массиву результатом является общее количество байтов в массиве. это означает, что размер массива n элементов n раз размер элемент.

выделено мной. Поделить на размер элемента sizeof(arr[0]) , чтобы получить n.

нет, это все равно приведет к правильному значению, потому что вы должны определить массив как все элементы одного типа или указатели на тип. В любом случае размер массива известен во время компиляции, поэтому sizeof(arr) / sizeof(arr[0]) всегда возвращает количество элементов.

вот пример того, как правильно использовать это:

Я пойду еще один здесь, чтобы показать , когда использовать это правильно. Вы не будете использовать его очень часто. Это в первую очередь полезно когда вы хотите определить массив специально, чтобы вы могли добавлять в него элементы без изменения большого количества кода позже. Это конструкция, которая в первую очередь полезна для техническое обслуживание. Канонический пример (когда я думаю об этом в любом случае ;-) строит таблицу команд для некоторой программы, которую вы собираетесь добавить больше команды позже. В этом примере для поддержания/улучшения вашей программы все, что вам нужно сделать, это добавить еще одну команду в массив, а затем добавить команду обработчик:

во-первых, вы можете обойти эту проблему с помощью std::vector вместо массива. Во-вторых, если вы поместите объекты производного класса в массив суперкласса, вы испытаете нарезку, но хорошая новость заключается в том, что ваша формула будет работать. Полиморфные коллекции в C++ достигаются с помощью указателей. Здесь есть три основных варианта:

Допустим у меня есть массив arr. Когда бы следующее не давало количество элементов массива: sizeof(arr) / sizeof(arr[0]) ?

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

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

это не может произойти (по, в принципе, по той же причине, что массивы Java не играют хорошо с дженериками). Массив статически типизирован; он резервирует «слоты» памяти, которые имеют размер для определенного типа (базового типа).

извините за тривиальный вопрос, я Java dev, и я довольно новичок в C++.

массивы C++ не являются первоклассными объектами. Вы можете использовать boost:: array чтобы сделать их более похожими на массивы Java, но имейте в виду, что у вас все равно будет семантика значений чем ссылочная семантика, как и все остальное. (В частности, это означает, что вы действительно не можете объявить переменную типа, аналогичную Foo[] в Java не заменяйте массив другим массивом другого размера; размер массива является частью типа.) Использовать .size() С этим классом, где вы бы использовали .length в Java. (Он также предоставляет итераторы, которые обеспечивают обычный интерфейс для итераторов C++.)

используйте макрос Microsoft «_countof(array)». Эта ссылка на Microsoft Developer Network объясняет это и предлагает пример, демонстрирующий разницу между макросом» sizeof(array) «и» _countof(array)».

_countof(my_array) в MSVC

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

элементы массива в C++ являются объектами, а не указателями, поэтому вы не можете иметь объект производного типа в качестве элемента.

и, как упоминалось выше, sizeof (my_array) (как и _countof ()) будет работать только в области определения массива.

Я знаю, что это старая тема, но как насчет простого решения, такого как цикл while?

Я знаю, что это медленнее, чем sizeof (), но это еще один пример подсчета массивов.

count

(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()

[ 0 ] = 1 ;
$a [ 1 ] = 3 ;
$a [ 2 ] = 5 ;
var_dump ( count ( $a ));

$b [ 0 ] = 7 ;
$b [ 5 ] = 9 ;
$b [ 10 ] = 11 ;
var_dump ( count ( $b ));

var_dump ( count ( null ));

var_dump ( count ( false ));
?>

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

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

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

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

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

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

Версия Описание
7.2.0 count() теперь будет выдавать предупреждение о некорректных исчисляемых типов, переданных в параметр array_or_countable .

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

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

User Contributed Notes 14 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.

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.

function average (array $test )
<
$sum = 0 ;
foreach( $test as $value ) <
$sum += $value ;
>

function countTest (array $test )
<
$i = 0 ;
while ( $i ++ 1000000 ) <
count ( $test );
$test [ «lol $i » ] = «teset $i » ;
>
>

function emptyTest (array $test )
<
$i = 0 ;
while ( $i ++ 1000000 ) <
empty( $test );
$test [ «lol $i » ] = «teset $i » ;
>
>

$test = [];
$i = 0 ;
while ( $i ++ 20000000 ) <
$test [] = $i ;
>

$j = 10 ;
$value = $j ;
$count = [];
$isEmpty = [];
while ( $j —) <
$time = microtime ( true );
countTest ( $test );
$count [] = microtime ( true ) — $time ;

$time = microtime ( true );
emptyTest ( $test );
$isEmpty [] = microtime ( true ) — $time ;
>

var_dump ( average ( $count ) / $value );
var_dump ( average ( $isEmpty ) / $value );

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

= is_array ( $countFruits ) || $countFruits instanceof Countable ? count ( $countFruits ) : 0 ;
?>

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.

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).

function getArrCount ( $arr , $depth = 1 ) <
if (! is_array ( $arr ) || ! $depth ) return 0 ;

$res = count ( $arr );

foreach ( $arr as $in_ar )
$res += getArrCount ( $in_ar , $depth — 1 );

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

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.

// $limit is set to the number of recursions
function count_recursive ( $array , $limit ) <
$count = 0 ;
foreach ( $array as $id => $_array ) <
if ( is_array ( $_array ) && $limit > 0 ) <
$count += count_recursive ( $_array , $limit — 1 );
> else <
$count += 1 ;
>
>
return $count ;
>
?>

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:

/**
* Recursively count elements in an array. Behaves exactly the same as native
* count() function with the $depth option. Meaning it will also add +1 to the
* total count, for the parent element, and not only counting its children.
* @param $arr
* @param int $depth
* @param int $i (internal)
* @return int
*/
public static function countRecursive (& $arr , $depth = 0 , $i = 0 ) <
$i ++;
/**
* In case the depth is 0, use the native count function
*/
if (empty( $depth )) <
return count ( $arr , COUNT_RECURSIVE );
>
$count = 0 ;
/**
* This can occur only the first time when the method is called and $arr is not an array
*/
if (! is_array ( $arr )) <
return count ( $arr );
>

// if this key is present, it means you already walked this array
if (isset( $arr [ ‘__been_here’ ])) <
return 0 ;
>

$arr [ ‘__been_here’ ] = true ;

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

Массивы

Массивы

П усть нам необходимо работать с большим количеством однотипных данных. Например, у нас есть тысяча измерений координаты маятника с каким-то шагом по времени. Создавать 1000 переменных для хранения всех значений очень. обременительно. Вместо этого множество однотипных данных можно объединить под одним именем и обращаться к каждому конкретному элементу по его порядковому номеру.
Массив в си определяется следующим образом
[ ];
Например,
int a[100];
Мы получим массив с именем a, который содержит сто элементов типа int. Как и в случае с переменными, массив содержит мусор.
Для получения доступа до первого элемента, в квадратных скобках пишем его номер (индекс). Например

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

Рис. 1 Массив хранит адрес первого элемента. Индекс i элемента — это сдвиг на i*sizeof(тип) байт от начала

Индекс массива указывает, на сколько байт необходимо сместиться относительно начала массива, чтобы получить доступ до нужно элемента. Например, если массив A имеет тип int, то A[10] означает, что мы сместились на 10*sizeof(int) байт относительно начала. Первый элемент находится в самом начале и у него смещение 0*sizeof(int) .
В си массив не хранит своего размера и не проверяет индекс массива на корректность. Это значит, что можно выйти за пределы массива и обратиться к памяти, находящейся дальше последнего элемента массива (или ближе).

Начальная инициализация массива.

Н апишем простую программу. Создадим массив, после чего найдём его максимальный элемент.

Разберём пример. Сначала мы создаём массив и инициализируем его при создании. После этого присваиваем максимальному найденному элементу значение первого элемента массива.

После чего проходим по массиву. Так как мы уже просмотрели первый элемент (у него индекс 1), то нет смысла снова его просматривать.
Тот же пример, только теперь пользователь вводит значения

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

Если необходимо заполнить весь массив нулями, тогда пишем

Можно не задавать размер массива явно, например

массив будет иметь размер 3

Размер массива

М ассив в си должен иметь константный размер. Это значит, что невозможно, например, запросить у пользователя размер, а потом задать этот размер массиву.

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

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

Переполнение массива

П ускай у вас есть такой код

Здесь цикл for задан с ошибкой. В некоторых старых версиях компиляторов этот код зацикливался. Дело в том, что переменная i располагалась при компиляции сразу за массивом A. При выходе за границы массива счётчик переводился в 1.
Массивы небезопасны, так как неправильная работа с индексом может приводить к доступу к произвольному участку памяти (Теоретически. Современные компиляторы сами заботятся о том, чтобы вы не копались в чужой памяти).
Если вы работаете с массивами, то необходимо следить за тем, чтобы счётчик не превышал размер массива и не был отрицательным. Для этого, как минимум,

  • 1. Используйте тип size_t для индексирования. Он обезопасит вас от отрицательных значений и его всегда хватит для массива любого размера.
  • 2. Помните, что массив начинается с нуля.
  • 3. Последний элемент массива имеет индекс (размер массива — 1)

Никаких полноценных способов проверки, вышли мы за пределы массива или нет, не существует. Поэтому либо мы точно знаем его размер, либо храним в переменной и считываем при надобности.

Примеры

Т еперь несколько типичных примеров работы с массивами
1. Переворачиваем массив.

Здесь незнакомая для вас конструкция

макрос. Во всём коде препроцессор автоматически заменит все вхождения SIZE на 10u.
2. Удаление элемента, выбранного пользователем.

Удаление элемента в данном случае, конечно, не происходит. Массив остаётся того же размера, что и раньше. Мы просто затираем удаляемый элемент следующим за ним и выводим SIZE-1 элементов.
3. Пользователь вводит значения в массив. После этого вывести все разные значения, которые он ввёл.
Пусть пользователь вводит конечное число элементов, допустим 10. Тогда заранее известно, что всего различных значений будет не более 10. Каждый раз, когда пользователь вводит число будем проходить по массиву и проверять, было ли такое число введено.

4. Пользователь вводит число — количество измерений (от 2 до 10). После этого вводит все измерения. Программа выдаёт среднее значение, дисперсию, погрешность.

5. Сортировка массива пузырьком

6. Перемешаем массив. Воспользуемся для этого алгоритмом Fisher-Yates:
Для i от N-1 до 1 выбираем случайное число j в пределах от 0 до i и меняем местами i-й и j-й элементы.

Последствия копипаста или считаем в PHP количество элементов в массиве

Дата публикации: 2020-12-26

От автора: семьдесят пять, шесть, семь…. Извините, я сейчас уже заканчиваю! Семьдесят…. Сколько? Тьфу, опять сбился! В общем, создал массив, «накопипастил» в него элементов, а теперь не могут понять, сколько их. А чего я мучаюсь? Ведь с помощью PHP количество элементов в массиве подсчитать очень даже легко.

А индекс зачем?

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

Решение этой проблемы кажется простым лишь на первый взгляд. Но если длина массива «зашкаливает» за сотни или даже тысячи, тогда у любого пойдет кругом голова. И метод «раз ромашка, а я четвертую нашел» явно вам не поможет. Как не помог и мне .

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

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

count

(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 , то будет возвращён .

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

Примеры

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

[ 0 ] = 1 ;
$a [ 1 ] = 3 ;
$a [ 2 ] = 5 ;
var_dump ( count ( $a ));

$b [ 0 ] = 7 ;
$b [ 5 ] = 9 ;
$b [ 10 ] = 11 ;
var_dump ( count ( $b ));

var_dump ( count ( null ));

var_dump ( count ( false ));
?>

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

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

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

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

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

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

Версия Описание
7.2.0 count() теперь будет выдавать предупреждение о некорректных исчисляемых типов, переданных в параметр array_or_countable .

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

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

число элементов массива (C)

17 ответов

Для статически определенного массива

int a[20];
int cnt = sizeof(a)/sizeof(int);

int сhsize(int a[], int n) <
if (n> sizeof(a)/sizeof(int) )
return 1;
>

будет работать? а то у меня что-то не особо работает=(

int сhsize(int a[], int n) <
if (n> sizeof(a)/sizeof(int) )
return 1;
>

будет работать? а то у меня что-то не особо работает=([/QUOTE]Не будет работать, так как в функции уже идет речь не о массиве, а об указателя на массив. А длина указателя равна 4 байта.

int сhsize(int a[], int n) <
if (n> sizeof(a)/sizeof(int) )
return 1;
>

будет работать? а то у меня что-то не особо работает=([/quote]
эээ. а как она должна работать? на i386 архитектуре, при n>1 она будет возвращать 0.

учитывая смысл функции, то надо не добавить а заменить параметр.
вместо указателя на функцию (int a[]), передавать его размер(sizeof(a)),
и тогда получим:

Илон Маск рекомендует:  Что такое код asp session_onstart
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL