ホームページ  >  記事  >  バックエンド開発  >  PHP カーネル in_array、PHP カーネル in_array_PHP の詳細なチュートリアル

PHP カーネル in_array、PHP カーネル in_array_PHP の詳細なチュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:05:211095ブラウズ

PHP kernel in_array、PHP kernel in_array の詳細

偶然コードの一部を見てしまった

1、a.php

リーリー

テスト

リーリー

2、b.php

リーリー

テスト

リーリー

9秒必要

b.php には重大な効率の問題があります。フォローアップしてテストしてください

リーリー

strtol には多くの時間がかかることがわかりました

ライブラリの機能を確認してみよう

リーリー

したがって、ソースコードには多くの型変換があるはずです

in_array について

in_array は次のようになります

リーリー

では、緩やかな比較が使用されます。 haystack 中搜索 needle,如果没有设置 strict

needle

検索する値。

が文字列の場合、比較では大文字と小文字が区別されます。 needle

haystack

この配列。

strict

3 番目のパラメータ

の値が TRUE の場合、strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystackin_array() 関数は の型が

のものと同じかどうかもチェックします。

それではソースコードを見てみましょう

最初のステップは ext/standard/array.c ファイルです

リーリー

ところで、array_searchを見てみましたが、基本的にin_arrayの内部実装と同じであることがわかりました

関数のパラメータは./zend.hにあります

リーリー

ステップ 2 ext/standard/array.c ファイル内の php_search_array プロトタイプを表示します

リーリー

strict の値の違いには 2 つの比較方法があることがわかりました。 2 つの関数の違いを見てみましょう。 is_identical_function 型が同じかどうかを確認します

リーリー

is_equal_function は型が同じかどうかをチェックしないため、暗黙的な変換が必要です

リーリー

==》比較関数

リーリー

配列と文字列を比較してみましょう

==》zend/zend_hash.c のzend_hash_compare

リーリー

==》Zend/zend_operators.c には zendi_smart_strcmp もあります

リーリー 型変換関数 is_numeric_string_ex は Zend/zend_operators.h にあります

フォローし続けてください

==》is_numeric_string_ex

リーリー 案の定、

type == IS_LONG

の場合、このコードがあります。

このコードをインターセプトします

リーリー 以上ですstrtol

はこちらです

http://www.bkjia.com/PHPjc/1069125.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1069125.html技術記事 PHP カーネル in_array の奥深くまで進むと、PHP カーネル in_array は誤ってコード 1 の一部を見つけました。 a.php?php$y="12";$x = array();for($j=0;$j50000;$j++ ){ $x[]= "{$j}";}for($i=0;$i30000;$i++){ if(in_ar...
🎜
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。