PHP:array_search-高速配列検索。 PHP array_search:配列内の値を検索します配列検索多次元配列

(PHP 4> = 4.0.5、PHP 5)

array_search-指定された値の配列を検索し、成功した場合は対応するキーを返します

説明

混合 array_search(混合針、アレイ干し草スタック[、bool strict])

干し草の山で針を検索し、配列内にキーがある場合はそれを返します。 FALSEそれ以外は。

コメント:針が文字列の場合、大文字と小文字を区別して比較されます。

コメント: PHP 4.2.0より前では、 array_search()失敗時に返される ヌルそれ以外の FALSE .

値を渡す場合 TRUE strictのオプションの3番目のパラメーターとして、関数 array_search()干し草の山の配列の針の種類もチェックします。

針が干し草の山に複数回存在する場合、最初に見つかったキーが返されます。 見つかったすべての値のキーを返すには、関数を使用します array_keys()オプションのパラメータsearch_valueを使用します。


例1:使用例 array_search()

$ array = array(0 => "blue"、1 => "red"、2 => 0x000000、3 => "green"、4 => "red"); $ key = array_search( "red"、 $ array); // $ key = 1;
$ key = array_search( "green"、$ array); // $ key = 2; (0x000000 == 0 == "緑")
$ key = array_search( "green"、$ array、true); // $ key = 3;
?>
注意

この関数はブール値として返すことができます FALSE、およびにキャストされる非ブール値 FALSE、たとえば、0または""。 詳細については、ブール型を参照してください。 ===演算子を使用して、この関数によって返される値をテストします。

配列内の値を検索するためにarray_search()関数をかなり長い間使用しています。これは、ループ内の配列を検索するよりも著しく高速であると聞いて読んだためですが、どれだけかはわかりませんでした。速かった。 ついにチェックとカウントに取り掛かりました。

この関数を使用して配列を検索する速度を、foreachおよびwhileループでの配列の通常の反復と比較しました。 10〜100の配列要素では、違いは認識できず、時間は非常に短いため、無視できます。 しかし、大規模なアレイの場合、その違いは非常に重要であることがわかりました。 配列のサイズが1桁大きくなると、検索時間も大幅に長くなります。 100,000個の要素を使用すると、foreachは0.013秒に、一方は0.017に低下し、array_search()も速度が低下しましたが、0.004秒で1桁高速のままでした。 大きな配列で動作する大きなスクリプトの場合、ループ検索をarray_search()検索に置き換えることは、ノミの最適化にはなりません。

この点で、私は職場の同僚の1人との最近の議論を思い出しました。プログラマーが言語のこれらの組み込み関数をすべて知る必要があるのか​​、それとも「プログラマーの考え方」と一般的な知識で十分なのかについてです。 この考え方については議論しませんが、関数、おそらくすべての構文の詳細ではなく、少なくともどの関数があり、それらが一般的に何ができるかを知る必要があると思います。

UPD:プログラマーの考え方が必要です。それも必要です。 そして、記憶に注意を払うことは害を及ぼすことはありません(休憩と範囲に触発されています:)

habrakatの下で、時間をカウントしたスクリプトコード:

$ mass = 100000; //検索する配列内の値の数
$ search = 50000; //配列でこの値を探します
$ first_result = array(); //最初のオプションの平均値を計算するための結果の配列
$ second_result = array(); //2番目のオプションの平均値を計算するための結果の配列
$ third_result = array(); //3番目のオプションの平均値を計算するための結果の配列

//配列を作成してデータを入力します
$ test_array = range(0、$ mass-1); // SelenITに感謝します))

/*
$ test_array = array();
for($ i = 0; $ i<$mass; $i++)
{
$ test_array = $ i;
}
*/

//平均を計算するためのループ
for($ d = 0; $ d<30; $d++) {

//***************array_searchで検索*******************

//時間のカウントを開始します
$ time_start = microtime(1);
// 検索
$ key = array_search($ search、$ test_array、true);
//見つかった場合
if($ key!== FALSE)//最初の要素の数が0であるため、必要です!==ではなく!=
{
echo $ test_array [$ key];
}
$ time_end = microtime(1);
//時間のカウントの終わり

//値の配列に書き込みます
$ first_result = $ time_end-$ time_start;

//***************foreachループを使用した配列検索*******************

//時間のカウントを開始します
$ time_start = microtime(1);
//自分自身を検索します
foreach($ test_array as $ ta)
{
if($ ta == $ search)
{
エコー$ta;
壊す;
}
}
$ time_end = microtime(1);
//時間のカウントの終わり

//値の配列に書き込みます
$ second_result = $ time_end-$ time_start;

//***************whileループを使用した配列検索*******************

//時間のカウントを開始します
$ time_start = microtime(1);

//配列の長さを決定します
$ count = count($ test_array);
$ j = 0;
//自分自身を検索します
while($ j<$count)
{
if($ test_array [$ j] == $ search)//見つかった場合
{
echo $ test_array [$ j];
壊す;
}
$ j ++;
}
$ time_end = microtime(1);
//時間のカウントの終わり

//値の配列に書き込みます
$ third_result = $ time_end-$ time_start;
}

$ srednee1 = array_sum($ first_result)/ count($ first_result);
$ srednee2 = array_sum($ second_result)/ count($ second_result);
$ srednee3 = array_sum($ third_result)/ count($ third_result);

Printf( "最初のコードは平均して%.7f秒で実行されました"、$ srednee1);
printf( "2番目のコードの平均実行時間:%。7f秒"、$ srednee2);
printf( "3番目のコードの平均実行時間:%。7f秒"、$ srednee3);

// 結果:
//最初のコードは平均0.0000295秒で実行されます
//平均で完了した2番目のコード:0.0153386秒
//3番目のコードは平均0.0226001秒で完了します

多くの場合、コードを記述するときに、要素の特定の値が配列に存在するかどうかを確認する必要があります。 今日は、これを実行できるいくつかの関数を見ていきます。

配列内の要素値の存在をチェックすることは、プログラミングのさまざまな問題を解決するために使用できます。

データベースからさまざまな配列を取得し、その中に特定の値が存在するかどうかを確認できます。 スクリプトのユーザーが何かを探している場合などに、目的の値を送信することもできます。 このような検索の結果に基づいて、特定のアクションを実行できます。 それはすべて特定のタスクに依存しますが、配列内の値を見つけるためのアルゴリズムは同じになります。

今日はそれらをレビューします。

値が配列にあるかどうかを確認します。 in_array()関数

関数 in_array()値が配列に存在するかどうかを確認できます。

その作業の結果が成功し、配列内の目的の要素が見つかった場合、関数は戻ります trueつまり、「真実」。

この関数は、2つの必須パラメーターを取ります。<Что ищем>と<Где ищем>.

また、もう1つのオプションのパラメーターを取ることができます。<Тип данных>。 この3番目のオプションのパラメーターに値がある場合 true、次にデータ型もチェックされます。 つまり、「2」と2は同じではありません。 前者の場合は文字列であり、後者の場合は数値です。 そして、全体の機能 in_array()値を返しません true.

また、関数では大文字と小文字が区別される比較が実行されることを覚えておく必要があります。

この関数がどのように機能するかを簡単な例で見てみましょう。
ある種の配列が必要です。 この関数を使用して、配列内の値の存在を確認し、画面に特定のメッセージを表示します。

関数が完了すると、要素「Marina」が配列に存在するため、画面に「Yes」というメッセージが表示されます。

関数の最初のパラメーターを存在しない要素に変更すると、「いいえ」というメッセージが表示されます。

値が配列にあるかどうかを確認します。 array_search()関数

別の検索機能があります array_search()、前のものとは異なり、見つかった要素のキーを返します。 これは、連想配列を使用している場合に役立ちます。

この関数は、前のパラメーターと同じパラメーターを取ります。 ただし、3番目のパラメーターもオプションです。

連想配列でどのように使用できるか見てみましょう。

"10月"、"お金"=> 200、"名前"=> "ミラ"); $ key = array_search( "Mila"、$ Mass1); if($ key)echo $ key; ?>

この場合、画面に「name」、つまり、値「Mila」で探している要素のキーが表示されます。

これらの2つの関数は非常に似ており、基本的には戻り値のみが異なります。

多次元配列で値を見つける

しかし、多次元配列を使用している場合はどうなるでしょうか。 結局のところ、その要素は他の配列になります。

ここでは、すでに検討したアルゴリズムは機能しません。

実際、すべてがそれほど複雑ではありません。メカニズム全体を少し複雑にして、ループを使用する必要があります。たとえば、 foreach()、これは配列で正常に機能します。

多次元配列があるとしましょう。 そのイミディエート値は、目的の要素値を含む可能性のある他の配列です。

実行する必要があるのは、ループ内の元の配列の要素を反復処理することだけです。 foreach()。 この配列の各要素は、キー($ key)と値($ value)に解析されます。

値は、メインの多次元配列内にある各配列になります。 これらの値を使用して、各内部配列で要素の目的の値を探します。

見つかった場合は、そのような要素が存在するというメッセージを表示し、存在しない場合は、そのような要素が存在しないという別のメッセージを表示します。

コード例でこれをすべて見てみましょう:

"anna"、 "id" => 234); $ Mass2 = array( "name" => "anton"、 "id" => 24); $ Mass2 = array( "name" => "ivan"、 "id" => 007); foreach($ Mass2 as $ key => $ value)($name。=in_array( "ivan"、$ value);)if($ name)echo "OK!Element here!"; それ以外の場合は、「要素なし!」とエコーします。 ?>

ご覧のとおり、最初に多次元配列自体を宣言します。

同時に、等号だけでなく「。=」もここに書く必要があります。

これは、$ name変数が各反復で上書きされないようにするために行われますが、補足されます。 結局のところ、最初の反復で要素が見つかり、値「true」が$ name変数に書き込まれ、2番目の反復(つまり、2番目の内部配列)に目的の要素値がない場合、 $ name変数の値は単純に上書きされ、その結果、正しい結果が得られません。

ご理解のとおり、このコードの結果は「OK! ここに要素があります!」

目的の要素を存在しない要素に変更しようとすると、「要素がありません!」というメッセージが表示されます。

もちろん、特定の要素が見つかった場合、または見つからなかった場合は、メッセージを表示するだけでなく、他のアクションを実行することもできます。 それはすべてあなたがする必要があることに依存します。 たとえば、配列に目的の値がある場合は、ユーザーに特定の情報などを提供できます。

それが今日のすべてです! レッスンが明確で役に立ったことを願っています! すべてを完全に理解するために、同様のコードを自分で作成してみてください。

そして、私はあなたのコメントを待っています。

ソーシャルボタンを使用して、友達とレッスンを共有します。 以下のネットワーク。 また、ブログの更新を購読します。 私たちはすでに有用な資料のかなり良いアーカイブを集めました、そしてそれらは補充されるだけです!

プログラミングが成功することを願っています!

アンナコテルニコワはあなたと一緒でした!

プログラミングは構文とセマンティクスに関するものです。 1つ目は言語のルールによって決定され、2つ目は開発者の経験によって決定されます。 配列に関しては、開発者はセマンティクスを使用して構文を微妙にロードできます。 まだオブジェクトではありませんが、従来の意味での配列ではなくなりました。 PHPを使用すると、自分自身を含むさまざまなタイプの変数から配列を作成できます。 配列要素は、関数、つまり、実際のアルゴリズム、実際の意味で配列をロードする機能にすることができます。

構文は安定していますが、バージョンごとに異なり、ボトムアップでも常に互換性があるとは限りません。 プログラムの移植性は、前世紀の忘れられがちな成果です。 セマンティクスは進化しており、どの言語のどのバージョンにも適用できるだけではありません。 言語の規則によってさえ提供されなかったものを表現するために構文構造を使用することが伝統になりました。 配列の例を使用すると、これは最も簡単に理解できます。

アレイ構築

PHPの配列には、便利な構文と機能があります。 これは事前に説明できますが、必要に応じてその場でアレイを作成すると便利なことがよくあります。

public $ aNone = array(); //配列が記述されており、何も含まれていません

public $ aFact = array( "avocado"、 "peach"、 "cherry"); //この配列には3つの要素があります

条件を確認しながら配列を作成する:

$ cSrcLine="解析されたデータの行";

for($ i = 0; $ i<13; $i++) {

if(checkFunc($ cSrcLine、$ cUserLine)(

$ aResult="はい"; //PHP配列に追加

$ aResult="いいえ";

この例を実行した結果、13個の要素の配列が作成され、その値は文字列「Yes」または「No」のみになります。 要素には0から12までのインデックスが付けられます。最初に「将来の」PHP配列を文字列に書き込むことで、同じ効果を得ることができます。

$ cFutureArray = "";

for($ i = 0; $ i<13; $i++) {

$ cUserLine = inputUserLine(); //何かを入力します

if($ i> 0)($cFutureArray。="|";)

if(checkFunc($ cSrcLine、$ cUserLine)($cFutureArray。="はい";

)else($cFutureArray。="No";)

$ aResult = explode( "|"、$ cFutureArray);

多次元配列

多くのコンテンツ管理システム(CMS)は、「大々的に」アレイを使用しています。 これは良い習慣である一方で、適用を困難にします。 著者が「配列内のPHP配列」の原則を理解している場合でも、それを悪用してはなりません。開発者だけが複雑な表記法に慣れる必要があるだけではありません。 多くの場合、しばらくすると、作成者自身が最初に書いたものを長い間覚えています。

"view_manager" => array(41、 "template_path_stack" => array(__DIR__。"/../view"、)、

"router" => array( "routes" => array( "sayhello" => array(

"type" => "Zend \ Mvc \ Router \ Http \ Literal"、

"options" => array( "route" => "/ sayhello"、 "defaults" => array(

"controller" => "Helloworld \ Controller \ Index"、 "action" => "index"、)))))))、

"controllers" => array( "invokables" => array(

"Helloworld \ Controller \ Index" => "Helloworld \ Controller \ IndexController"))

これは、ZF 2のPHP配列内配列のサンプルプラクティスです。最初はあまり刺激的ではありませんが、機能し、おそらくこのフレームワークを成功させます(ZendSkeletonApplication / module / Helloworld / config / module.config.phpモジュールの例)。

配列は、設計および開発中の重要なデータ構成です。 その多次元バリアントはかつて人気がありましたが、時間の経過とともに、最大2次元または3次元の配列の必要性が残りました。 この方法の方が簡単で明確です。プロフェッショナリズムの観点から、何かが増え始めた場合、それは問題の説明またはコードに何かが間違っていることを意味します。

シンプルで、アクセスしやすく、理解しやすい

phpの配列内に配列を作成するときは、2つまたは3つのレベルに制限するのが最善です。 PHPの安定性と信頼性にもかかわらず、構文構造の処理でエラーが発生します。 優れたコードエディタがあれば、これに我慢でき、角かっことカンマを正確に数えることに慣れることができます。 ただし、PHPはデータ型を制御せず(これは最新のプログラミングのカルマです)、開発者がセマンティックエラーを練習できるようにします。

変数のタイプを制御するルール、またはセマンティクスを構文に変換するという自分自身のアイデアは、多くの場合、手ごろな価格の贅沢です。 これは、スクリプトの速度、コードの可読性の低下です...コーディングの単純さは常に不可欠だからです。

PHPには重大なマイナスの機能があります。あいまいさが発生すると、スクリプトがハングするだけです。 すべてのデバッガーが予期しない状況を処理するわけではなく、多くは開発者の経験と直感に依存します。 アルゴリズムが単純であるほど、情報にアクセスしやすくなり、エラーを見つけたり、まったくエラーを見つけなかったりする可能性が高くなります。

最初の配列が登場したとき、データ型が構造の形で提案されたのが特徴です。これは、さまざまなデータ型から何かを作成するという不器用な試みです。 前者は生き残り、新しい効率的な構文を取得しました。後者は歴史に名を残しました。

シンプルで連想配列

2次元配列エントリは、角かっこ「[」と「]」の別のペアです。次に例を示します。$ aSrcDataは、$aSrcData配列に含まれる配列の要素を参照します。 PHPでは、事前にデータを宣言する必要はありません。 宣言された情報は、いつでも存在を確認できます。

必要なときにだけ必要な形で作成し、不要になったときに破棄するのは非常に効率的です。 キー(インデックス)として意味のある名前を使用すると、アルゴリズムの現在の場所のコンテキストで意味のある読みやすい構造を取得できます。

$ aAnketa ["name"] = "Ivanov";
$ aAnketa ["age"] = 42;
$ aAnketa ["work"]="ディレクター";
$ aAnketa ["active"] = true;
$ aTable = $ aAnketa;

$ aAnketa ["name"] = "Petrov";
$ aAnketa ["age"] = 34;
$ aAnketa ["work"]="マネージャー";
$ aAnketa ["active"] = true;
$ aTable = $ aAnketa;

$ aAnketa ["name"]="アファナシエフ";
$ aAnketa ["age"] = 28;
$ aAnketa ["work"] = "Worker";
$ aAnketa ["active"] = false;
$ aTable = $ aAnketa;

$sOne。=implode( ";"、$ aTable)。 「」
";//文字列への2番目のPHP配列
$sOne。=$aTable ["work"]; //2番目の配列の1つの要素にアクセスする

この例の結果(最初の配列は正常で、その中のキーは0から始まり、2番目の配列は連想的で、「name」、「age」、「work」、「active」の4つのキーがあります):

$ sOne="ペトロフ;34;マネージャー;1
マネジャー";

この簡単な例では、作成したアンケートをすべての従業員に適用する方法を確認できます。 従業員番号によるインデックスを使用して従業員の配列を作成できます。特定の従業員が必要な場合は、従業員番号でその従業員を選択します。

組織に細分化されている場合、季節労働者がいる場合、または働く退職者を分離する必要がある場合は、...「PHP-array-in-array」構造は非常に便利ですが、その次元に夢中になることはありません。 2次元または3次元は、効果的なソリューションの限界です。

配列を操作するためのキー

すべてがどのように機能するかが問題になる前の場合、バイナリ時代の最後の数年間、プログラマーが配列の要素がどのように格納されているかを正確に知り、それらに直接アクセスしたいとき、それらは完全に忘れられていました。 メモリ内で1バイトをはるかに超える量を占める多くの文字エンコーディングが登場しています。 「ビット」という単語はビット検索操作でのみ検出できるようになりましたが、PHP配列での検索は別の問題です。 要素へのアクセスは単純で連想的です。 最初のケースでは、配列要素(PHPで使用可能なタイプのいずれか)に0、1、2、...の番号が付けられます。2番目のケースでは、プログラマーは自分のインデックスを指定します。望ましい値。

$ aLine ["fruit"]="オレンジ"; //ここでPHP配列キー="fruit"

または(ページとコードのエンコーディングを尊重して、すべてが正しくなるように):

$ aLine = iconv( "UTF-8"、 "CP1251"、 "orange");

$ aLine配列に新しい値を追加する場合:

$ aLine = iconv( "UTF-8"、 "CP1251"、 "peach");
$ aLine = iconv( "UTF-8"、 "CP1251"、 "キュウリ");
$ aLine = iconv( "UTF-8"、 "CP1251"、 "eggplant");

ループの結果として:

foreach($ aLine as $ ck => $ cv)(
$cOne。=$ck。 "="。 $cv。 「」
";
}

受け取る:

フルーツ=オレンジ
0=桃
野菜=きゅうり
1=ナス

PHP-要素「peach」と「eggplant」を追加するときの配列のキーは0から順番に形成され、その値を指定すると、この値と等しくなります。

配列から要素を削除する

最も簡単な方法は、処理中です。 この場合、例えば、ループの実行の結果として、元の配列がスキャンされ、新しい配列が形成され、不要な要素は単純に書き込まれません。

あなたはそれをより簡単に行うことができます。 最後の例に適用した場合:

unset($ line); //PHP配列から要素を削除します

その場合、結果は次のようになります。

フルーツ=オレンジ
野菜=きゅうり
1=ナス

配列要素を操作するための多くのオプションがあります。 たとえば、関数implode()およびexplode()を使用すると、1つの区切り文字を使用してPHP配列を文字列に書き込み、別の区切り文字を使用して別の配列に解析し直すことができます。

PHPで配列全体を削除するには、次のように記述します。unset($ aLine);

それは十分だ。

配列検索

PHPは特別なルックアップ関数とin_array()関数を提供しますが、それらを使用することを決定する前に、独自のPHP配列ルックアップを行うことを検討する必要があります。

すべてのプロジェクトは、特にセマンティクスの一部が構文に転送され、非常に具体的な意味のあるキーのセットで表される場合、特定の構築された配列です。 これにより、独自の検索機能を実行でき、意味のあるラベルを付けることもできます。

PHPでは、プログラムの実行中に名前が決定された関数を呼び出すことができます。 PHPWordライブラリの非常に実用的な例。これにより、MSWordドキュメントを読み取って作成できます。

$ elements = array( "Text"、 "Inline"、 "TextRun"、 "Link"、 "PreserveText"、 "TextBreak"、
"ListItem"、 "ListItemRun"、 "Table"、 "Image"、 "Object"、 "Footnote"、
"Endnote"、 "CheckBox"、 "TextBox"、 "Field"、 "Line");

$ 関数=配列();

for($ i = 0; $ i< count($elements); $i++) {
$ features [$ i]="追加"。 $ elements [$ i];
}

その結果、$functions配列は$elements配列の値、つまりドキュメントの実際の要素で機能する実際の関数の名前を受け取ります。

$elementsで$functions関数を呼び出すことにより、完全なルックアップと高速な結果を得ることができます。

要素の並べ替え

データをソートするタスクは重要であり、PHPはこれにいくつかの関数を提供します:sort()、rsort()、asort()、ksort()、...昇順および降順の要素、次の2つの関数はキーと値。 配列値をランダムにシャッフルすることが理にかなっている場合があります--shuffle()。

ソートにPHP関数を使用する場合、要素は異なるタイプだけでなく、完全に自然なコンテンツを持たない可能性があることを忘れてはなりません。 まず、ロシア語の文字を含む文字列の並べ替え、日付の並べ替え、およびさまざまな形式で記述された数値の並べ替えに十分注意する必要があります。

少なくともスクリプトのテスト段階で、独自の完璧なソリューションを作成する最良の方法は、手動で並べ替えることです。 予期しない状況を予測するのに役立ちます。

文字列配列

implode()関数とexplode()関数のおかげで、配列を簡単に文字列に変換して元に戻すことができます。 これにより、データをコンパクトなビューに保存し、必要に応じて便利な状態に拡張できます。

文字列に変換された配列は、新しい可能性を開きます。 たとえば、テキスト内のキーワードを検索するタスクでは、見つかったものが再度追加されないようにする必要があります。

$ cSrcLine="テキストテキストListItemRunTextBoxListItemTextBoxチェックボックスチェックボックスTextBox脚注";

$ aSrc = explode( ""、$ cSrcLine);
$ cDstLine = "";

for($ i = 0; $ i< count($aSrc); $i++) {
$ cFind="["。 $ aSrc[$i]。 "]";
if(!is_integer(strpos($ cDstLine、$ cFind)))(
$cDstLine。=$cFind;
}
}
$ aDst = explode( "] ["、$ cDstLine);

$ cOne = implode( ";"、$ aDst);

その結果、$ cOne変数は、ソース文字列から一度だけ発生する値「Text; ListItemRun; TextBox; ListItem; Check; Box;CheckBox;Footnote」のみを受け取ります。

キーと値のロシア語

構文構造で国別エンコーディングに関連するものを使用することはお勧めしません。 ロシア語は、文字がa〜zを超える他のすべての言語と同様に、データ領域では問題を引き起こしませんが、コード構文では問題を引き起こしません。 単純なPHPタスクでさえ「配列をプリンターまたは画面に出力する」と「崩れる」ことがあり、多くの場合、単にスクリプトを停止します。

PHPは忠実な言語であり、国のエンコーディングに耐性がありますが、キー値が適切な場所と適切なタイミングでポップアップし、認識できないという理由だけで、実行した作業量を再度実行する必要がある場合が多くあります。

PHPの構文と言語環境

PHP構文は1つですが、この構文の構成要素は、他のアプリケーション、オペレーティングシステム、ハードウェアオプションを「処理」することを覚えておく必要があります。 多くのオプションがあり、すべてを予測することは決して不可能です。

「コードにはコードのみが含まれ、入力、内部、および出力に情報がある」というルールは、予期しない予期しない事態を回避するのに役立ちます。 配列内のPHP値は「ロシア語」にすることができますが、そのキーは、指定された言語の観点からだけでなく、その環境の観点からも構文的に正しい必要があります。

配列を操作するときの基本的な操作の1つは、特定の値を見つけることです。 これは、PHPのarray_search()関数の目的です。 1次元コレクションと連想コレクションの両方を処理でき、配列内でルックアップ値が見つかった場合はそのキーを返します。

構文

PHPでのarray_search()関数の形式化された説明は次のとおりです。

混合array_search(混合値、配列$ collection [、bool strict])

入力パラメータ:

  • $collection-検索する配列。
  • value-任意のタイプの目的の値。
  • strictは、厳密な型認識比較メカニズムを設定するオプションのブールフラグです。

動作メカニズム

PHPのarray_search()関数は、値をコレクション配列内のすべての値と順番に比較します。 デフォルトでは、比較はオペランドのタイプを考慮せずに実行されます。 この設定は、strictフラグをTRUEに設定することで変更できます。 文字列の比較では大文字と小文字が区別されます。

一致するものが見つかった場合、見つかった要素に対応するキーが返され、関数は終了します。 したがって、配列内の目的の値の複数の出現を検出するために使用することはできません。

一致するものが見つからない場合、関数はブール値FALSEを返します。

厳密な等式演算子(===)を使用して、返された結果を確認する必要があります。 関数は、0や空の文字列など、FALSEと評価される値を返す可能性があるため、これは重要です。

使用例

例1.多次元配列をPHParray_search()関数に渡す場合、作業の結果は検索対象の要素のキーになります。

"winter"、 "season2" => "spring"、 "season3" => "summer"、 "season4" => "autumn"); $ result1 = array_search( "winter"、$ array); $ result2 = array_search( "summer"、$ array); $ result3 = array_search( "april"、$ array); ?>

この例では、文字列「april」が元の配列に存在しないため、$ result1は「season1」に設定され、$ result2は「season3」に設定され、$result3はブール値FALSEに設定されます。

例2.PHPのarray_search()関数は、キーを次の数値インデックスとして順番に考慮して、1次元配列を処理することもできます。

$ arrayの「hunter」要素のインデックスに従って、変数$resultは1に設定されます。

例3.結果の分析で発生する可能性のあるエラー。

"ワシントン"、1 => "アダムス"、2 => "ジェファーソン"、3 => "マディソン"、4 => "モンロー"); $ result = array_search( "Washington"、$ Presidents); if(!$ result)(echo "G.ワシントンは米国の初代大統領ではなかった";)?>

したがって、厳密に平等に結果を確認しなくても、ジョージ・ワシントンが米国の初代大統領ではなかったという予期しないメッセージを受け取ることができます。

例4:最初に見つかった一致のキーのみが返されます。

検索された値が配列内で3回出現しても、関数は最初に見つかった結果-0のみを返します。複数の一致を検索するには、PHPのarray_keys()関数を使用することをお勧めします。