この記事では主に PHP の count 関数の例について詳しく説明します。興味のある方はぜひ参考にしてください。
PHP プログラミングでは、配列を走査するときに、ループの終了を決定する条件として配列の長さを計算する必要があることがよくあります。PHP では配列の操作が非常に頻繁に行われるため、count もよく使用される関数です。 . count 関数の具体的な実装を以下で見てみましょう。
github の PHP ソースコードにさらに詳細な注釈を付けています。興味があれば、見てスターを付けてください。 PHP5.4のソースコードのアノテーション。追加されたアノテーションは、コミット レコードを通じて確認できます。
count
int count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] )
count 関数は、配列またはオブジェクト内のすべての要素の数をカウントします。
オブジェクトの場合、SPL 拡張機能をインストールすると、Countable インターフェイスを実装することで count 関数を呼び出すことができます。 Countable インターフェイスには、count() 関数の戻り値を返すメソッド Countable::count() が 1 つだけあります。
パラメータの説明
mode
パラメータモードがCOUNT_RECURSIVE (または1)に設定されている場合、count()は配列を再帰的に計算します。多次元配列を計算する場合に特に便利です。
最初のパラメータが配列または Countable インターフェイスを実装するオブジェクトでない場合、count 関数は 1 を返します。
注: count 関数は無限ループを回避するために再帰を検出できますが、無限再帰が発生したり、予想より大きな値を取得したりすると、E_WARNING プロンプトが返されます。
サンプルを実行する
一般的なアプリケーション
$arr1 = array(1, 2, 3, 4, 5); $val1 = count($arr1); // 5
多次元配列
$arr2 = array('apple', 'banana', array('cat', 'camel'), 'dog'); $val2_1 = count($arr2); // 4 $val2_2 = count($arr2, 1); // 6
数値と文字列
$str = "hello world"; $int_val = 1; $val3 = count($str); // 1 $val4 = count($int_val); // 1
一般的なオブジェクト
class User { private $name; private $address; } $user = new User(); $val5 = count($user); // 1 $val6 = count((array) $user); // 2
配列のようなオブジェクト
class User extends ArrayObject { private $name; public function __construct() { $this->name = 'hhq'; } public function getName() { return $this->name; } public function count() { return 2; } } $user2 = new User(); $val7 = count($user2); // 2
Countableインターフェイスオブジェクトの実装
class User implements Countable { public function count() { return 3; } } $user3 = new User(); $val8 = count($user3); // 3
Rアンニングステップ
switchステートメントを入力してパラメータの型を検出します
NULLの場合は直接0を返します
配列の場合はphp_count_recursive関数を呼び出して配列の要素数を自動的に選択します
オブジェクトの場合は、最初にそれが配列のようなオブジェクトである場合、配列オブジェクトの数を数えます
それ以外の場合、オブジェクトが Countable インターフェイスを実装している場合は、Countable の count メソッドを呼び出します
最後に、整数配列や文字列などの他の型は 1 を返します。
ソースコードの解釈
通常の配列の場合、count関数はphp_count_recursive関数を呼び出してその関数を実装します。実行手順は次のとおりです。
現在のハッシュバケットの回数がrecursively accessed が 1 より大きい場合、繰り返し再帰を意味し、E_WARNING エラーを返します
それ以外の場合は、現在の配列レベルの配列要素の数を計算します
再帰パラメータ オプションがある場合は、再帰アクセスを続行します
パラメータがオブジェクト型の場合、実装はまずハンドラーが定義されているかどうかを判断します。ハンドラーは PHP カーネル内のオブジェクトの構造であり、実際には関数である count_elements フィールドが含まれています。オブジェクトが配列のように動作する場合 (一般に配列様オブジェクトと呼ばれます)、 count_elements 関数が実行されます。具体的な実装では、クラスが PHP の ArrayObject を継承し、クラス内に count 関数を実装します。その具体的な呼び出しは、クラスが count 関数を実装していない場合は 0 を返し、それ以外の場合はオブジェクトの count 関数の戻り値を返します。が返されます。
他のデータ型の場合
1、文字列
2、数値
3の場合、オブジェクトブランチでの判定が両方とも偽の場合、つまりArrayObjectは継承されず、Countableインターフェースは実装されていない。
これらの型はすべて 1 を返します。
オブジェクトの属性の数を計算する必要がある場合は、まずオブジェクトを配列に変換してから、count 関数を呼び出すことができることに注意してください。例:
$count_value = count((array) $user);
概要: 上記がこの記事の全内容です。皆さんの学習に役立つことを願っています。
関連おすすめ:
PHPリクエストの詳細説明 ソケットインターフェースのテスト例
以上がPHPのcount関数例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。