ホームページ  >  記事  >  バックエンド開発  >  PHP ソース コード 3 についての簡単な説明: strrchr、strstr、stristr 関数について

PHP ソース コード 3 についての簡単な説明: strrchr、strstr、stristr 関数について

不言
不言オリジナル
2018-06-28 16:34:052778ブラウズ

この記事では、主に PHP ソース コード 3 についての簡単な説明を紹介します。strrchr、strstr、stristr 関数については、必要な友人に参照していただけるよう共有します。 string strrchr (string haystack, string needle)

干し草の最後の針 (文字) の後の文字列を返します

針が数値の場合、この数値をこの値に対応する文字に変換します

針は複数の文字列です。最初の文字を取ります。
haystack が数値の場合、数値は直接文字列に変換されます。
プログラム内で、convert_to_string_ex(haystack);

を呼び出します。この関数は基本的に (上記と同様) いくつかの特殊な状況を処理します。

最後に、最後の針が表示される位置を特定し、この位置が存在しない場合は、この位置の後の文字列を返します。 falseを返す


string strstr (string haystack, string needy)

この関数はstrrchrと似ていますが、needleが文字列であることが許可され、次のように最初に出現したneedleを検索します。この位置は次の文字列を返します。文字列が存在しない場合は、FALSE を返します。


コードには、以下のコードに示すように、学習する価値のある特別な詳細がいくつかあります。

 static inline char *zend_memnstr(char *haystack, char *needle, int needle_len, char *end){
    char *p = haystack;
    char ne = needle[needle_len-1];     if(needle_len > end-haystack) {
        return NULL;
    }
    end -= needle_len;   //    优化细节一,仅查找end-needle_len长度的字符串     while (p <= end) {
        //    优化细节二,此处先判断字符串的开头和结尾的字符是否一样,如果一样则再判断整个字符串,提升性能
        if ((p = (char *)memchr(p, *needle, (end-p+1))) && ne == p[needle_len-1]) {    
            if (!memcmp(needle, p, needle_len-1)) {
                return p;
            }
        }         if (p == NULL) {
            return NULL;
        } 
        p++;
    }     return NULL;}

上記のコードは、strstr 関数と stristr 関数によって実装されたコア コードです。 機能: haystack 内で針が最初に出現する位置を検索します。

string stristr (string haystack, string needy)

strstr 関数 この関数は、大文字と小文字が区別されない点を除けば、strstr と似ています。

PHP ソース コードの実装の主な違いは、すべての文字列を小文字に変換する操作が追加されていることです。プログラムの実装では、検索の前に次のコードが追加されます。

   php_strtolower(s, s_len);php_strtolower(t, t_len);return php_memnstr(s, t, t_len, s + s_len);

PS: プロセス内。ソース コードを見て、「ポインターを再認識する」の前の段落をもう一度読み、いくつかの洞察を得ることができました。ポインタのような変数には属しませんが、アドレスが加算と減算の機能を持っているからこそ、ポインタはアドレスを格納する変数として加算と減算の演算を行うことができます。

これは整数変数と同じです。整数は加算、減算、乗算、除算ができるため、加算、減算、乗算、除算も行うことができます。

以上がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項:

PHP ソース コードに関する簡単な説明 2: strlen、strto lower、strtoupper、ord、chr 関数について

PHP ソース コード 1: 関数の爆発と内包に関する簡単な説明

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。