1. Hàm count() trong PHP

Hàm count() trong PHP được sử dụng để đếm phần tử trong mảng. Không chỉ là với mảng mà hàm count() cũng có thể đếm được số lượng thuộc tính trong một đối tượng hay là lấy ra giá trị nào đó trong một đối tượng có thể đếm được. Hàm count() sẽ đếm và trả về số nguyên là số phần tử trong mảng khi được sử dụng với một mảng. Hàm có thể trả về 0 cho biến đã được đặt thành một mảng trống. Nếu sử dụng với một đối tượng Countable thì hàm sẽ trả về giá trị trả về của phương thức. Ngoài ra, đối với biến không được đặt, hàm cũng trả về 0. Thậm chí nếu đối tượng được truyền vào không phải là một mảng, đồng thời cũng không phải một đối tượng của Countable thì sẽ trả về 1. Hàm count() được giới thiệu và sử dụng từ phiên bản PHP 4.0

2. Cú pháp của hàm count() trong PHP

Ta có cú pháp của hàm count() trong PHP là :

count($array, $mode)

Trong đó :

  • $array : là mảng hay đối tượng truyền vào để đếm. Tham số này là bắt buộc trong hàm
  • $mode : là tham số tùy chọn trong hàm. Nó được sử dụng để đặt chế độ đếm của hàm count() . Mặc định là hằng số COUNT_NORMAL (có giá trị là 0). Nếu $mode là hằng số COUNT_RECURSIVE (có giá trị là 1) thì hàm count() có thể đếm tất cả các phần tử trong mảng một cách đệ quy phù hợp với mảng nhiều chiều.

Như mình đã nói thì hàm count() sẽ trả về số phần tử của mảng được đếm, nếu đối tượng được truyền vào không phải là một mảng, đồng thời cũng không phải một đối tượng của Countable thì sẽ trả về 1. Trường hợp ngược lại khi đối tượng là NULL sẽ trả về 0.

Lưu ý

Hàm count() có thể phát hiện đệ quy để tránh một vòng lặp vô hạn, nhưng sẽ ném ra một E_WARNING mỗi khi nó xảy ra (trong trường hợp mảng chứa chính nó nhiều lần) và trả về một số lượng cao hơn dự kiến.

Ví dụ : đếm và trả về số lượng phần tử trong một mảng

<?php
$a1=array("PHP","Java","Python","HTML","CSS");
echo count($a1);
?>

Kết quả

5

3. Ví dụ về hàm count() trong PHP

Ví dụ 1: đếm đệ quy một mảng

<?php
$cars=array
   (
   "PHP"=>array
   (
   "60",
   "90"
   ),
   "Java"=>array
   (
   "X3",
   "X5"
   ),
   "HTML"=>array
   (
   "CSS"
   )
   ); 
echo "Đếm bình thường: " . count($cars)."<br>";
echo "Đếm một cách đệ quy: " . count($cars,1);
?>

Kết quả

Đếm bình thường: 3
Đếm theo cách đệ quy: 8

Ta cũng có thể thay 1 bằng COUNT_RECURSIVE để đếm một cách đệ quy

Ví dụ 2: sử dụng hàm count() với Countable object

<?php
class CountMe implements Countable
{

    protected $_myCount = 100;

    public function count()
    {
        return $this->_myCount;
    }

}

$countable = new CountMe();
$value = count($countable);
?>

Kết quả

100

Trong các trường hợp ta cần triển khai một vòng lặp, có thể sử dụng count() thì hãy sử dụng giải pháp sau, để tối ưu code hơn.

//Hiệu năng kém
for($i=0;$i<count($some_arr);$i++)
{
    // code
}
//Bằng cách sao chép count mảng, sẽ có hiệu năng tốt hơn
$arr_length = count($some_arr);
for($i=0;$i<$arr_length;$i++)
{
    // code
}

Nếu ta muốn kiếm tra số phần tử không phải là mảng trong một mảng đa chiều bạn có thể sử dụng cách sau

function count_elt($array, &$count=0){
  foreach($array as $v) if(is_array($v)) count_elt($v,$count); else ++$count;
  return $count;
}