int count ( mixed $var [, int $mode ] )
(PHP 4, PHP 5)
배열원소나 객체의 수를 세는 함수로 재귀적 카운트가 가능합니다.
sizeof 함수와 동일한 동작을 하며, mode 에 1(또는 상수 COUNT_RECURSIVE)로 설정하면 재귀적, 다차원 배열의 수를 셉니다.
mode를 생략하면 1차원 배열만 카운트합니다.
<?php
echo count(null);
echo "<br />\n";
echo count(false);
echo "<br />\n";
echo count(array());
echo "<br />\n";
echo count($bar);
echo "<br />\n";
echo count(0);
echo "<br />\n";
echo count(-1);
echo "<br />\n";
echo count(1);
echo "<br />\n";
echo count("");
echo "<br />\n";
echo count(" ");
?>
사실 음수나 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";
echo icount(false);
echo "<br />\n";
echo icount(0);
echo "<br />\n";
echo icount("");
?>
<?php
$a[0] = 1;
$a[1] = 3;
$a[2] = 5;
$result = count($a);
$b[0] = 7;
$b[5] = 9;
$b[10] = 11;
$result = count ($b);
?>
다음은 재귀적으로 다차원 배열 수를 셉니다.
<?php
$food = array( 'fruits' => array('orange', 'banana', 'apple'),
'veggie' => array('carrot', 'collard','pea'));
echo count($food,COUNT_RECURSIVE);
echo count($food);
?>
다음은 참고할 다차원 예제입니다.
<?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";
?>
다음은 재귀함수를 사용하여 배열의 실질적 수를 카운트합니다.
<?php
function countValuesRecursive($array, $count = 0) {
foreach ($array as $value) {
if (is_array($value)) {
$count = countValuesRecursive($value, $count);
} else {
if ($value) {
$count++;
}
}
}
return $count;
}
$data = array(
"apples" =>
array("red", "yellow", "pineapples", "green"),
"bananas" =>
array("small", "medium", "big", "large"),
"vegs" =>
array("potatoes", "carrots", "onions", "join")
);
echo countValuesRecursive($data);
?>