Menu

count() w PHP: długość i rozmiar tablicy

count($arr) zwraca liczbę elementów tablicy w PHP, więc count(['a', 'b', 'c']) to 3. Dowiedz się, jak liczyć tablice zagnieżdżone z COUNT_RECURSIVE, jak sizeof() ma się do count(), jak liczyć pasujące wartości i dlaczego count(null) od PHP 8 rzuca TypeError.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

count($arr) zwraca liczbę elementów tablicy: count(['red', 'green', 'blue']) to 3. Tablice w PHP nie mają właściwości length, więc długość lub rozmiar tablicy pobierasz przez count().

count() jest szybkie: PHP przechowuje rozmiar wewnątrz tablicy, więc policzenie miliona elementów kosztuje tyle samo co policzenie trzech.

Liczenie tablicy wielowymiarowej

Domyślnie count() liczy tylko najwyższy poziom. Podaj COUNT_RECURSIVE (albo 1) jako drugi argument, aby policzyć każdy element na każdej głębokości. Same zagnieżdżone tablice też są liczone, dlatego suma bywa większa niż liczba wartości w liściach.

Oba skróty zakładają dokładnie dwa poziomy. Przy głębszym zagnieżdżeniu w tablicy wielowymiarowej policz liście przez array_walk_recursive(): $n = 0; array_walk_recursive($arr, function () use (&$n) { $n++; });.

count vs sizeof

sizeof() to alias count(): te same argumenty, ten sam wynik. Używaj count(). Używa go prawie cały kod i dokumentacja PHP, a sizeof sugeruje rozmiar w bajtach każdemu, kto zna C.

Liczenie wartości spełniających warunek

count() nie ma argumentu z warunkiem. Najpierw przefiltruj, potem policz: array_filter() zostawia elementy, które akceptuje twój callback. Aby policzyć, ile razy pojawia się każda wartość, użyj array_count_values().

Liczenie znaków w stringu

count() służy do tablic. Dla stringa użyj strlen() dla bajtów albo mb_strlen() dla znaków; różnią się, gdy tylko tekst ma znaki diakrytyczne, polskie litery czy japoński. Różnicę opisuje strona o strlen. Aby policzyć słowa, najpierw podziel tekst.

str_word_count() traktuje litery spoza ASCII jako separatory, więc naïve liczy się jako dwa słowa. Dzielenie po spacjach jest bardziej przewidywalne dla prawdziwego tekstu.

count() na null lub stringu rzuca błąd

Od PHP 8 count() przyjmuje tylko tablice i obiekty implementujące Countable. Wszystko inne rzuca TypeError, podczas gdy PHP od 7.2 do 7.4 zwracało 0 (dla null) albo 1 (dla stringa lub liczby) z ostrzeżeniem. Zwykła przyczyna to zmienna, która czasem jest null, na przykład brakujący klucz albo funkcja, która nic nie zwróciła.

Podstaw pustą tablicę przez ??, a wynik wyniesie 0:

Sprawdzanie, czy tablica jest pusta

Aby zapytać „czy w tej tablicy coś jest”, porównaj z pustą tablicą albo użyj empty(). count($arr) === 0 też działa, ale tylko gdy $arr na pewno jest tablicą.

empty($x) nigdy nie rzuca błędu, nawet gdy $x jest niezdefiniowane albo null, dlatego to bezpieczniejsze sprawdzenie dla wartości, która może nie być tablicą. Pozostałe zasady (pusty string i "0" też są puste) opisuje strona o empty.

Najczęściej zadawane pytania

Jak pobrać długość tablicy w PHP?

Użyj count($arr). Zwraca liczbę elementów jako liczbę całkowitą, więc count([10, 20, 30]) to 3. Tablice w PHP nie mają właściwości length.

Czym różni się count od sizeof w PHP?

Niczym. sizeof() to alias count() i przyjmuje te same argumenty. Większość kodu używa count(), a sizeof() może mylić osoby znające C, gdzie oznacza bajty.

Jak policzyć elementy tablicy wielowymiarowej?

count($arr) liczy tylko najwyższy poziom. count($arr, COUNT_RECURSIVE) liczy każdy element na każdej głębokości, a zagnieżdżone tablice też liczą się jako elementy.

Dlaczego count() rzuca TypeError w PHP 8?

Od PHP 8.0 count() przyjmuje tylko tablice i obiekty implementujące Countable. count(null) rzuca TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given, a count('abc') to samo z string given. Dla wartości, która może być null, użyj count($x ?? []), a dla stringów strlen().

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ