PHP_php の例の count 関数を深く理解する
PHP プログラミングでは、配列を走査するときに、ループの終了を決定する条件として最初に配列の長さを計算する必要があることがよくあります。PHP では配列に対する操作が非常に頻繁に行われるため、カウントも重要です。よく使用される関数です。以下で学習してみましょう。 count 関数の具体的な実装を見てみましょう。
github には PHP ソース コードに関するより詳細な注釈があります。興味があれば、見てスターを付けてください。 PHP5.4のソースコードのアノテーション。追加されたアノテーションは、コミット レコードを通じて確認できます。
カウント
int count ( mixed $array_or_countable [, int $mode = COUNT_NORMAL ] )
count 関数は、配列またはオブジェクト内のすべての要素の数をカウントします。
オブジェクトの場合、SPL 拡張機能をインストールすると、Countable インターフェイスを実装して count 関数を呼び出すことができます。 Countable インターフェイスには、count() 関数の戻り値を返すメソッド Countable::count() が 1 つだけあります。
パラメータの説明
モード
パラメータ モードが 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
ステップを実行します
switch ステートメントを入力してパラメータの型を検出します
NULL の場合は、直接 0 を返します
配列の場合は、php_count_recursive 関数を呼び出して、配列要素の数を自動的に選択します
オブジェクトの場合は、まず配列状のオブジェクトであるかどうかを確認し、配列状のオブジェクトの数を計算します。
それ以外の場合、オブジェクトが Countable インターフェイスを実装している場合は、Countable の count メソッドを呼び出します
最後に、整数配列や文字列などの他の型は 1 を返します。
ソースコード解釈
通常の配列の場合、count 関数は php_count_recursive 関数を呼び出してその関数を実装します。実行手順は次のとおりです。
現在のハッシュ バケットが再帰的にアクセスされた回数が 1 より大きい場合、再帰が繰り返されたことを意味し、E_WARNING エラーが返されますそれ以外の場合は、現在の配列レベルの配列要素の数を計算します
再帰パラメータ オプションがある場合は、再帰アクセスを続行します
パラメータがオブジェクト型の場合、実装はまずハンドラーが定義されているかどうかを判断します。ハンドラーは PHP カーネル内のオブジェクトの構造であり、実際には関数である count_elements フィールドが含まれています。オブジェクトが配列のように動作する場合 (一般に配列様オブジェクトとして知られています)、 count_elements 関数が実行されます。具体的な実装では、クラスが PHP の ArrayObject を継承し、クラス内に count 関数を実装します。その具体的な呼び出しは、クラスが count 関数を実装していない場合は 0 を返し、それ以外の場合はオブジェクトの count 関数の戻り値を返します。が返されます。
他のデータ型の場合
1. 文字列2. 数字
3. オブジェクトブランチの if 判定が両方とも false の場合、つまり ArrayObject が継承されず、Countable インターフェースが実装されていない場合。
これらの型はすべて 1 を返します。
オブジェクトの属性の数を計算する必要がある場合は、まずオブジェクトを配列に変換してから、count 関数を呼び出すことができることに注意してください。例:
$count_value = count((array) $user);
概要
count 関数のソース コードを読んでいるときに、if (Z_OBJ_HT_P(array)->count_elements) ステップで行き詰まってしまいました。なぜなら、このブランチに入るデモをまだ書けなかったからです。インターネットでたくさんの情報を検索しましたが、役に立たず、TIPI の reeze を参照して、最終的に希望する答えを得ることができました。分からなかったら聞いてください(笑)。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます
