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
<?php
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;
}
?>
count
(PHP 4, PHP 5)
count — 変数に含まれるすべての要素、 あるいはオブジェクトに含まれる何かの数を数える
説明
変数に含まれるすべての要素、 あるいはオブジェクトに含まれる何かの数を数えます。
オブジェクトに対して、もし SPL がインストールされている場合、インターフェイス Countable を実装することで count() にフックすることができます。このインターフェイスには 1 つのメソッド Countable::count() があり、 count() 関数に対する値を返します。
配列の実装やPHPでの使用法に関する詳細な説明については、マニュアルの 配列のセクションを参照ください。
パラメータ
-
var -
配列あるいはオブジェクト。
-
mode -
オプションの
mode引数がCOUNT_RECURSIVE(または 1) にセットされた場合、 count() は再帰的に配列をカウントします。 これは多次元配列の全ての要素をカウントするといった場合に特に有効です。警告count() は、再帰を検出して無限ループを回避するようになっています。 しかしその場合 (配列の中に自分自身が複数回登場する場合) は毎回
E_WARNINGを発行し、期待する結果より大きい数を返します。
返り値
varに含まれる要素の数を返します。
もし var が配列もしくは
Countable インターフェイスを実装したオブジェクトではない場合、
1 が返されます。
ひとつ例外があり、var が NULL の場合、
0 が返されます。
count() は、セットされていない変数に関して 0 を返しますが、変数が空の配列として初期化されている場合にも 0 を返します。 ある変数がセットされているかどうかを調べるには、 isset() を使用してください。
変更履歴
| バージョン | 説明 |
|---|---|
| 4.2.0 |
オプションのパラメータ mode が追加されました。
|
例
例1 count() の例
<?php
$a[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
$food = array('fruits' => array('orange', 'banana', 'apple'),
'veggie' => array('carrot', 'collard', 'pea'));
// 再帰的なカウント
echo count($food, COUNT_RECURSIVE); // output 8
// 通常のカウント
echo count($food); // output 2
?>
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).
<?php
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);
return $res;
}
?>
Please note: While SPL is compiled into PHP by default starting with PHP 5, the Countable interface is not available until 5.1
Hi there,
there is a simple script with example for counting rows and columns of a two-dimensional array.
<?php
$data = array(
"apples" =>
array("red", "yellow", "pineapples"),
"bananas" =>
array("small", "medium", "big"),
"vegs" =>
array("potatoes", "carrots", "onions")
);
$rows = count($data,0);
$cols = (count($data,1)/count($data,0))-1;
print "There are {$rows} rows and {$cols} columns in the table!";
?>
As of PHP 5.2.6, count() DOES detect infinite recursion.
It triggers a warning when its argument is a recursive array.
If you want to count only elements in the second level of 2D arrays.A close to mind note, useful for multidimentional arrays:
<?php
$food = array('fruits' => array('orange', 'banana', 'apple'),
'veggie' => array('carrot', 'collard','pea'));
// recursive count
echo count($food,COUNT_RECURSIVE); // output 8
// normal count
echo count($food); // output 2
// all the fruits and veggies
echo (count($food,COUNT_RECURSIVE)-count($food,0)); //output 6
?>
