PHP ソース コードの簡単な説明 1: 関数の展開と内包

不言
リリース: 2023-04-01 21:44:01
オリジナル
1625 人が閲覧しました

この記事では、主に PHP ソース コード 1:explode 関数と implode 関数について簡単に説明します。これを必要な友人に共有します。 .explode と implode 関数

arrayexplode (string separator, string string [, int limit])

この関数は、文字列で構成される配列を返します。各要素は文字列による境界点として使用されます。セパレータを分割します。 limit パラメーターが設定されている場合、返される配列には制限要素までが含まれ、最後の要素には文字列の残りの部分が含まれます。

この関数の時間計算量は O(strlen(separator) * strlen(string)) である必要があります。

実装プロセスは基本的に、文字列 string を走査し、セパレータである場合はそれと比較します。同様に、ハッシュ テーブルを書き込み、文字列ポインタを新しい位置 (つまり、各区切り文字の右側) に移動します。


さらに、制限が未満の場合には特別な処理があります。 0

この関数の実装は主に次のものに依存します。php_memnstr 関数については、php.h ファイルでその定義を確認できます。

#define php_memnstr zend_memnstr
実際の関数は zend_memnstr です。 Zend/zend_operators.h ファイルの 217 行目 定義とその実装は、主に while ループと 2 つの C 言語関数 memchr および memcmp

string implode (string 接着剤、配列部分)

この関数は戻り値を返します。接着文字列で接続されたピースの配列 各要素の文字列。

この関数は、パラメータとして配列、配列と文字列をパラメータとして受け取ることができ、文字列と配列の順序は、次のコードのように、プログラム内の状況ごとに特別な処理が可能です。
#

if (argc == 1) {
                            if (Z_TYPE_PP(arg1) != IS_ARRAY) {                            //              只有一个参数并且还不是数组
                                          php_error_docref(NULL TSRMLS_CC, E_WARNING, "Argument must be an array");
                                          return;
                            } 
                            MAKE_STD_ZVAL(delim);#define _IMPL_EMPTY ""
                            ZVAL_STRINGL(delim, _IMPL_EMPTY, sizeof(_IMPL_EMPTY) - 1, 0); 
                            SEPARATE_ZVAL(arg1);
                            arr = *arg1;
              } else {              //              两个参数
                            if (Z_TYPE_PP(arg1) == IS_ARRAY) {              //              如果每一个参数是数组
                                          arr = *arg1;
                                          convert_to_string_ex(arg2);
                                          delim = *arg2;
                            } else if (Z_TYPE_PP(arg2) == IS_ARRAY) {              //              如果第二个参数是数组
                                          arr = *arg2;
                                          convert_to_string_ex(arg1);
                                          delim = *arg1;
                            } else {
                                          php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid arguments passed");
                                          return;
                            }
              }
ログイン後にコピー

最終的にはarrに配列を代入し、そうでない場合はdelimに代入するという処理です。配列を走査し、文字列を連結するだけです。このプロセスでは、smart_str 関連の関数が使用されており (詳細については、ここをクリックしてください)、タイプごとに異なる接続操作が実行されます (数値の場合は、数値を変換する必要があります)。これらはすべて、smart_str の関連関数によって処理されます。)

上記がこの記事の全内容であり、皆様の学習に役立つことを願っています。 PHPの中国語サイトです!

関連する推奨事項:

PHP の strtr 関数のいくつかの奇妙な動作についての説明

PHP の HashTable の分析についてPHP ソースコード

以上がPHP ソース コードの簡単な説明 1: 関数の展開と内包の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!