まずはウォーミングアップとしてphp in array関数の基礎知識を紹介します。
定義と使用法
in_array() 関数は、配列内で指定された値を検索します。
文法
in_array(値,配列,型)
パラメータ | 説明 |
---|---|
価値 | 必須。配列内で検索する値を指定します。 |
配列 | 必須。検索する配列を指定します。 |
タイプ | オプション。このパラメータを true に設定すると、検索されたデータの型と配列の値が同じであるかどうかがチェックされます。 |
説明
指定された値 value が配列配列に存在する場合は true を返します。 3 番目のパラメーターが true に設定されている場合、関数は要素が配列内に存在し、指定された値と同じデータ型を持つ場合にのみ true を返します。
パラメータが配列内に見つからない場合、関数は false を返します。
注: value パラメーターが文字列で、type パラメーターが true に設定されている場合、検索では大文字と小文字が区別されます。
偶然コードを見てしまった
リーリーテストしてみました
[root@dev tmp]# time php b.php
実質0分9秒517秒
ユーザー 0分4.486秒
システム0分0.015秒
実際には9秒かかります
in_array は次のようになります
コードをコピーします コードは次のとおりです:
bool in_array (mixed $needle , array $haystack [, bool $strict = FALSE ] )
厳密が設定されていない場合は、緩和された比較を使用して、干し草の山で針を検索します。
針
検索する値。針が文字列の場合、比較では大文字と小文字が区別されます。
干し草の山
この配列。
厳しい
3 番目のパラメータ strict の値が TRUE の場合、in_array() 関数は針の種類が干し草の山のものと同じかどうかもチェックします。
それではソースコードを見てみましょう
最初のステップは ext/standard/array.c ファイルです
リーリーところで、array_searchを見てみましたが、基本的にin_arrayの内部実装と同じであることがわかりました
関数のパラメータは./zend.hにあります
#define INTERNAL_FUNCTION_PARAM_PASSTHRU ht、return_value、return_value_ptr、this_ptr、return_value_used TSRMLS_CC
2 番目のステップは、ext/standard/array.c ファイル内の php_search_array プロトタイプを表示することです
リーリーstrict の値の違いには 2 つの比較方法があることがわかりました。 2 つの関数の違いを見てみましょう。
is_identical_functionは型が同じかどうかをチェックします リーリー
is_equal_function は型が同じかどうかをチェックしないため、暗黙的な変換が必要です
リーリー