int count ( mixed $var [, int $mode ] )
(PHP 4, PHP 5)

배열원소나 객체의 수를 세는 함수로 재귀적 카운트가 가능합니다. sizeof 함수와 동일한 동작을 하며, mode 에 1(또는 상수 COUNT_RECURSIVE)로 설정하면 재귀적, 다차원 배열의 수를 셉니다. mode를 생략하면 1차원 배열만 카운트합니다.

<?php
 // null 은 0의 값을 가집니다.
 echo count(null);
 echo "<br />\n"; // 결과: 0

 echo count(false);
 echo "<br />\n"; // 결과: 1 

 // 빈 배열이면 0을 반환합니다.
 echo count(array());
 echo "<br />\n"; // 결과: 0

 // $bar 변수를 설정하지 않았다면, 0 을 반환합니다.
 echo count($bar);
 echo "<br />\n"; // 결과: 0

 echo count(0);
 echo "<br />\n"; // 결과: 1

 echo count(-1);
 echo "<br />\n"; // 결과: 1

 echo count(1);
 echo "<br />\n"; // 결과: 1 

 echo count("");
 echo "<br />\n"; // 결과: 1 

 echo count(" "); // 결과: 1 
 ?>

사실 음수나 false가 카운트 수에 포함되지 않아야 한다면, 다음과 같이 함수를 작성해서 사용할 수 있습니다.

<?php 
 function icount($cnt, $mode=0){
      if($mode === 1){
           $mode = COUNT_RECURSIVE;
      }
      if(!empty($cnt) && ($cnt !== -1)){
           return count($cnt, $mode);
      }
      return 0;
 }

 echo icount(-1); 
 echo "<br />\n"; // 결과: 0

 echo icount(false);
 echo "<br />\n"; // 결과: 0 

 echo icount(0);
 echo "<br />\n"; // 결과: 0

 echo icount(""); // 결과: 0
 ?>

<?php
 $a[0] = 1;
 $a[1] = 3;
 $a[2] = 5;
 $result = count($a);
 // 결과: 3

 $b[0] = 7;
 $b[5] = 9;
 $b[10] = 11;
 $result = count ($b);
 // 결과: 3
 ?>

다음은 재귀적으로 다차원 배열 수를 셉니다.

<?php
 $food = array( 'fruits'  => array('orange', 'banana', 'apple'),
               'veggie'  => array('carrot', 'collard','pea'));

 // 재귀 count 수
 echo count($food,COUNT_RECURSIVE);
 // 결과: 8

 // 보통 count 수
 echo count($food);
 // 결과: 2
 ?>

다음은 참고할 다차원 예제입니다.

<?php
 $data = array( 
    "apples" => 
        array("red", "yellow", "pineapples", "green"), 
    "bananas" => 
        array("small", "medium", "big", "large"), 
    "vegs" => 
        array("potatoes", "carrots", "onions", "join") 
 );
 $rows = count($data,0);
 $cols = (count($data,1)/count($data,0))-1;


 echo "\$rows => $rows, \$cols => $cols";
 // 결과: $rows => 3, $cols => 4
 ?> 

다음은 재귀함수를 사용하여 배열의 실질적 수를 카운트합니다.

<?php 
 function countValuesRecursive($array, $count = 0) {    
      foreach ($array as $value) {
           if (is_array($value)) {            
                $count = countValuesRecursive($value, $count); 
            } else {
                 if ($value) {
                      $count++; 
                 } 
            } 
      } 
      return $count; 
 } // end func

 $data = array( 
    "apples" => 
        array("red", "yellow", "pineapples", "green"), 
    "bananas" => 
        array("small", "medium", "big", "large"), 
    "vegs" => 
        array("potatoes", "carrots", "onions", "join") 
 );
 
 echo countValuesRecursive($data);
 // 결과: 12
 ?>

0 댓글