PHPは配列値内の要素を検索します。 PHP array_search: 配列内の値を検索します。 PHP の構文と言語環境
プログラミングは構文とセマンティクスに関するものです。 1 つ目は言語のルールによって決まり、2 つ目は開発者の経験によって決まります。 配列に関しては、開発者はセマンティクスを使用して構文を具体的にロードできます。 これはまだオブジェクトではありませんが、従来の意味での配列ではなくなりました。 PHP では、変数自体を含むさまざまな型の変数の配列を作成できます。 配列要素は関数にすることができます。つまり、実際のアルゴリズム、つまり実際の意味で配列をロードする機能です。
構文は安定していますが、バージョンごとに変化するため、下位から上位まで互換性があるとは限りません。 プログラムの移植性は、忘れ去られていた前世紀の成果です。 セマンティクスは進化しており、どの言語のどのバージョンにも適用できるだけではありません。 言語のルールでさえ規定されていないものを表現するために構文構造を使用することが伝統となっています。 これは、配列の例を使用すると最も簡単に理解できます。
配列の構築
PHP の配列には便利な構文と機能があります。 これは事前に説明できますが、多くの場合、必要に応じてその場で配列を作成すると便利です。
public $aNone = array(); // 配列は記述されていますが、何も含まれていません
public $aFact = array("アボカド", "桃", "チェリー"); // この配列には 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 .= "いいえ"; )
$aResult =explode("|", $cFutureArray);
多次元配列
多くのコンテンツ管理システム (CMS) は配列を大々的に使用しています。 これは良い習慣である一方で、使いにくくなります。 作成者が「配列内の PHP 配列」原則を理解しているとしても、それを悪用すべきではありません。複雑な表記法に慣れる必要があるのは開発者だけではありません。 多くの場合、しばらくすると、作成者自身が最初に書いたことを長い間覚えています。
"view_manager" => array(41, "template_path_stack" => array(__DIR__ . "/../view",),
"ルーター" => 配列("ルート" => 配列("sayhello" => 配列(
"タイプ" => "Zend\Mvc\Router\Http\Literal",
"options" => array("route" => "/sayhello", "defaults" => array(
"コントローラー" => "Helloworld\Controller\Index"、"アクション" => "インデックス"、)))))、
"コントローラー" => 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["名前"] = "イワノフ";
$aアンケタ["年齢"] = 42;
$aAnketa["作品"] = "ディレクター";
$aAnketa["アクティブ"] = true;
$aTable = $aアンケタ;
$aAnketa["名前"] = "ペトロフ";
$aアンケタ["年齢"] = 34;
$aAnketa["仕事"] = "マネージャー";
$aAnketa["アクティブ"] = true;
$aTable = $aアンケタ;
$aAnketa["name"] = "アファナシエフ";
$aアンケタ["年齢"] = 28;
$aAnketa["仕事"] = "労働者";
$aAnketa["アクティブ"] = false;
$aTable = $aアンケタ;
$sOne .= implode ("; ", $aTable) . 」
"; // 2 番目の PHP 配列を文字列に変換
$sOne .= $aTable["作業"]; // 2 番目の配列の 1 つの要素にアクセスします
この例の結果 (最初の配列は通常で、その中のキーは 0 から始まり、2 番目の配列は連想配列で、「name」、「age」、「work」、「active」の 4 つのキーがあります):
$sOne = "ペトロフ; 34; マネージャー; 1
マネージャー";
この簡単な例は、作成したアンケートをすべての従業員に適用する方法を示しています。 従業員番号によるインデックスを持つ従業員の配列を作成し、特定の従業員が必要な場合は、従業員番号でその従業員を選択できます。
組織に部門がある場合、季節労働者がいる場合、または働いている年金受給者を個別に識別する必要がある場合は、「配列内の PHP 配列」設計は非常に便利ですが、決してその次元に夢中になるべきではありません。 効果的なソリューションの限界は 2 次元または 3 次元です。
配列を操作するためのキー
以前はすべてがどのように配置されているかが重要であったとすれば、近年では、プログラマーが配列の要素がどのように正確に格納されているかを知り、それらの要素に直接アクセスしたいと考えていたバイナリ時代の伝統は完全に忘れ去られました。 メモリ内で 1 バイトを超える文字エンコーディングが多数登場しています。 「ビット」という単語はビット検索操作でのみ検索できるようになりましたが、PHP 配列の検索は別のトピックになります。 要素へのアクセスは単純かつ連想的に行うことができます。 最初のケースでは、配列要素 (PHP で使用可能な型のいずれかを含む) には 0、1、2、... の番号が付けられます。2 番目のケースでは、プログラマはアクセスするために、多くの場合「キー」と呼ばれる独自のインデックスを指定します。希望の値。
$aLine["フルーツ"] = "オレンジ"; // ここでは PHP 配列 key = "フルーツ"
または (ページのエンコーディングとコードを考慮して、すべてが正しくなるように):
$aLine = iconv("UTF-8", "CP1251", "オレンジ");
$aLine 配列に新しい値を追加する場合:
$aLine = iconv("UTF-8", "CP1251", "ピーチ");
$aLine = iconv("UTF-8", "CP1251", "キュウリ");
$aLine = iconv("UTF-8", "CP1251", "ナス");
ループを実行した結果:
foreach ($aLine as $ck => $cv) (
$cOne .= $ck 。 「=」。 $cv 。 」
";
}
受信されます:
果物=オレンジ
0=ピーチ
野菜=キュウリ
1=ナス
「桃」と「茄子」の要素を追加する際のPHP配列キーは0から順に形成され、その値を指定する場合はこの値と等しくなります。
配列からの要素の削除
最も簡単な方法は、処理中に行うことです。 この場合、たとえば、ループを実行した結果、元の配列がスキャンされて、不要な要素が単純に書き込まれない新しい配列が形成されます。
もっと簡単かもしれません。 最後の例に当てはめると、次のようになります。
unset($aLine); // 配列要素を削除します PHP
結果は次のようになります:
果物=オレンジ
野菜=キュウリ
1=ナス
配列要素を操作するには多くのオプションがあります。 たとえば、関数 implode() およびexplode() を使用すると、1 つの区切り文字を使用して PHP 配列を文字列に書き込み、それを別の区切り文字を使用して解析して別の配列に戻すことができます。
PHP で配列全体を単純に削除するには、次のように記述するだけです: unset($aLine);
それは十分だ。
配列内で検索する
PHP には特別な検索関数と in_array() 関数が含まれていますが、それらを使用する前に、PHP 配列検索を自分で行うことを検討する必要があります。
どのプロジェクトでも、特にセマンティクスの一部が構文に転送され、非常に具体的な意味のあるキーのセットで表される場合には、特定の構築された配列があります。 これにより、独自の検索機能を実行でき、意味のある方法でラベルを付けることもできます。
PHP では、プログラムの実行中に名前が決定される関数を呼び出すことができます。 PHPWord ライブラリの非常に実用的な例。これを使用すると、MS Word ドキュメントの読み取りと作成が可能になります。
$elements = array("Text", "Inline", "TextRun", "Link", "PreserveText", "TextBreak",
「ListItem」、「ListItemRun」、「表」、「画像」、「オブジェクト」、「脚注」、
"文末脚注"、"チェックボックス"、"テキストボックス"、"フィールド"、"行");
$関数 = 配列();
for ($i = 0; $i< count($elements); $i++) {
$functions[$i] = "追加" 。 $elements[$i];
}
その結果、$functions 配列は $elements 配列の値、つまり実際のドキュメント要素を扱う実際の関数の名前を受け取ります。
$elements で $functions を呼び出すと、完璧な検索と迅速な結果が得られます。
アイテムの仕分け
データを並べ替えるタスクは重要であり、PHP にはこのための関数がいくつか用意されています。sort()、rsort()、asort()、ksort() などです。昇順要素と降順要素、2 番目の 2 つの関数はキーと値の関係を保存します。 。 場合によっては、配列値をランダムにシャッフルする - shuffle() ことが合理的です。
並べ替えに PHP 関数を使用する場合、要素には異なる型が含まれるだけでなく、完全に自然なコンテンツが含まれるわけではないことを忘れてはなりません。 まず、ロシア語の文字を含む文字列の並べ替え、日付、およびさまざまな形式で書かれた数値の並べ替えには細心の注意を払う必要があります。
少なくともスクリプトのテスト段階では、理想的なソリューションを自分で作成する最善の方法は、手動で並べ替えることです。 不測の事態を予測するのに役立ちます。
文字列配列
implode() 関数とexplode() 関数のおかげで、配列を文字列に簡単に変換して返すことができます。 これにより、データをコンパクトな表現で保存し、必要に応じて使いやすい状態に拡張できます。
配列を文字列に変換すると、新たな可能性が広がります。 たとえば、テキスト内のキーワードを検索するタスクでは、見つかった内容を再度追加しないことが必要です。
$cSrcLine = "テキスト テキスト ListItemRun TextBox ListItem TextBox チェック ボックス CheckBox 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 値は「ロシア語」にすることができますが、そのキーは、特定の言語の観点からだけでなく、その動作環境の観点からも構文的に正しい必要があります。
多次元から (18)
array_search 関数を説明するために、以下の例の 1 つを変更しました。 searchItemsByKey 関数は、多次元配列 (N レベル) から $key によるすべての値を返します。 おそらくこれは誰かにとって役立つでしょう。 例:
$arr = array("XXX"=>array("YYY"=> array("AAA"=> array("keyN" =>"value1")), "ZZZ"=> array("BBB"=> array) ("keyN" => "value2")) //....)); $result = searchItemsByKey($arr,"keyN"); 印刷」
"; print_r($result); print ""; // 出力配列 ( => 値 1 => 値 2)機能コード:
Function searchItemsByKey($array, $key) ( $results = array(); if (is_array($array)) (if (isset($array[$key]) && key($array)==$key) $results = $array[$key]; foreach ($array を $sub_array として) $results = array_merge($results, searchItemsByKey($sub_array, $key));
uidを検索して配列のキーを取得したい配列があります。
例
次の 2 次元配列があると仮定します。
$userdb = array(array("uid" => "100", "name" => "サンドラ シュシュ", "pic_square" => "urlof100"), array("uid" => "5465", "name" => "ステファニー・マクモン", "pic_square" => "urlof100"), array("uid" => "40489", "name" => "マイケル", "pic_square" => "urlof40489"));
search_by_uid(100) (最初のユーザーの uid) を呼び出すと 0 が返されるはずです。
search_by_uid(40489) 関数呼び出しは 2 を返す必要があります。
ループを作成しようとしましたが、より高速な実行可能コードが必要です。
Jakub の優れた回答に基づいて、(uid だけでなく) キーを指定できる、より一般化された検索を次に示します。
関数 searcharray($value, $key, $array) (foreach ($array as $k => $val) (if ($val[$key] == $value) (return $k; ) ) return null ;)
使用法: $results = searcharray("searchvalue", searchkey, $array);
Function searchForId($id, $array) ( foreach ($array as $key => $val) (if ($val["uid"] === $id) ( return $key; ) ) return null; )
それが動作します。 次のように呼び出す必要があります:
$id = searchForId("100", $userdb);
=== を使用する場合、比較される演算子の型はまったく同じである必要があることを知っておくことが重要です。この例では、文字列を探すか、 === の代わりに == を使用する必要があります。
答えに基づいて アンゴラ。 PHP の新しいバージョン (>= 5.5.0) では、ワンライナーを使用できます。
$key = array_search("100", array_column($userdb, "uid"));
これは古い質問であり、受け入れられた回答がありますが、受け入れられた回答に1つの変更を提案したいと思いました。 したがって、まず第一に、ここで受け入れられた答えが正しいことに同意します。
Function searchArrayKeyVal($sKey, $id, $array) ( foreach ($array as $key => $val) (if ($val[$sKey] == $id) ( return $key; ) ) return false; )
代わりに、プリセットの「uid」を関数内のパラメーターに置き換えます。そのため、以下のコードを呼び出すと、複数の配列型に対して 1 つの関数を使用できるようになります。 小さな変化ですが、少し違います。
// ユーザーの配列データ $userdb = array (array ("uid" => "100","name" => "Sandra Shush","url" => "urlof100"), array ("uid" => " 5465","name" => "ステファニー マクモン","url" => "urlof100")、配列 ("uid" => "40489","name" => "マイケル","url" => "urlof40489" ")、); // 配列のキーを取得 $arrayKey = searchArrayKeyVal("uid", "100", $userdb); if ($arrayKey!==false) ( echo "検索結果: ", $userdb[$arrayKey]["name"]; ) else ( echo "検索結果が見つかりません"; )
If(! function_exists("arraySearchMulti"))( function arraySearchMulti($search,$key,$array,$returnKey=false) ( foreach ($array as $k => $val) ( if (isset($val[$ key])) ( if ((string)$val[$key] == (string)$search) ( return ($returnKey ? $k: $val); ) )else( return (is_array($val) ? arraySearchMulti ($search,$key,$val,$returnKey) : null ) ) null を返す ))
この機能を使用できます。 https://github.com/serhatozles/ArrayAdvancedSearch
="2""; $Array = array("a" => array("d" => "2"), array("a" => "サンプルワールド","b" => "2"), array("c" => "3"), array("d" => "4"),); $Result = ArraySearch($Array,$query,1);
"; print_r($Result); エコー ""; // 出力: // 配列 // (// => 配列 // (// [a] => サンプルワールド // [b] => 2 //) // //)質問の場合、つまり
$a = [ [ "_id" => "5a96933414d48831a41901f2", "discount_amount" => 3.29, "discount_id" => "5a92656a14d488570c2c44a2", ], [ "_id" => "5a9790fd14d48879cf16a9e8", _量" => 4.53、 "discount_id" => "5a9265b914d488548513b122", ], [ "_id" => "5a98083614d488191304b6c3", "discount_amount" => 15.24, "discount_id" => "5a92806a14d48858ff5c2ec3", ], [ id" "5a982a4914d48824721eafe3", "discount_amount " => 45.74, "discount_id" => "5a928ce414d488609e73b443", ], [ "_id" => "5a982a4914d48824721eafe55", "discount_amount" => 10.26, "discount_id" => "5a928ce414d488609e73b44 3"、]、];
Function searchForId($id, $array) ( $did=0; $dia=0; foreach ($array as $key => $val) ( if ($val["discount_id"] === $id) ( $ dia +=$val["discount_amount"]; $did++; ) if($dia != "") ( echo $dia; var_dump($did); ) null を返します。 print_r(searchForId("5a928ce414d488609e73b443",$a));
これも試してみてください
関数 search_in_array($srchvalue, $array) ( if (is_array($array) && count($array) > 0) ( $foundkey = array_search($srchvalue, $array); if ($foundkey === FALSE) ( foreach ($array as $key => $value) ( if (is_array($value) && count($value) > 0) ( $foundkey = search_in_array($srchvalue, $value); if ($foundkey != FALSE ) $foundkey を返します; ) ) それ以外の場合は $foundkey を返します。
$a = ["x" => ["eee", "ccc"], "b" => ["zzz"]]; $found = null; $search = "ええ"; array_walk($a, function ($k, $v) use ($search, &$found) (if (in_array($search, $k)) ( $found = $v; ) )); var_dump($found);
同じ内容のワンライナーを次に示します。
$pic_square = $userdb["pic_square"];
これは私の例です。これが私の最初の答えであることに注意してください。 特定の配列を 1 つだけ探す必要があるため、param 配列を削除しましたが、簡単に追加することもできます。 基本的に、uid 以外のものを検索したかったのです。
また、私の状況では、一意ではない可能性のある他のフィールドによる検索の結果として複数のキーが返される可能性があります。
/** * @param 多次元配列 * @param 検索する文字列値、つまり name_first のような特定のフィールド名 * @param 文字列を検索するための連想キー、つまり field_name * * @return 配列キー。 */ function search_revisions($dataArray, $search_value, $key_to_search) ( // この関数は、探している連想キーに関連する特定の値のリビジョンを検索します。 // $keys = array(); foreach ($dataArray as $key => $cur_value) (if ($cur_value[$key_to_search] == $search_value) ($keys = $key; ) ) $keys を返します。
後で、別の値と連想キーを検索できるようにするためにこれを書くことになりました。 したがって、私の最初の例では、特定の連想キーの値を検索し、一致するものをすべて返すことができます。
この 2 番目の例は、値 (「Taylor」) が特定の関連付けキー (first_name) のどこにあるかを示しています。 そして別の値 (true) が別の連想キー (使用済み) で見つかり、すべての一致 (「Taylor」という名前の人物が使用されているキー) が返されます。
/** * @param 多次元配列 * @param string $search_value 検索する値、つまり特定の "Taylor" * @param string $key_to_search 検索するための連想キー、つまり first_name * @param string $other_matching_key 連想キー雇用されている一致で検索するキー * @param string $other_matching_value 一致する連想キーで検索する値、つまり true * * @return 配列キー、つまり雇用されているファーストネームが "Taylor" のすべての人々。 */ function search_revisions($dataArray, $search_value, $key_to_search, $other_matching_value = null, $other_matching_key = null) ( // この関数は、探している連想キーに関連する // 特定の値のリビジョンを検索します。 $キー = array(); foreach ($dataArray as $key => $cur_value) ( if ($cur_value[$key_to_search] == $search_value) ( if (isset($other_matching_key) && isset($other_matching_value) ) ( if ( $cur_value[$other_matching_key] == $other_matching_value) ( $keys = $key; ) ) else ( // 一部の検索には複数の一致が含まれる可能性があり、 // 他の検索には複数の一致がない可能性があることに留意する必要があります。 $keys = $key; ) return $keys; を指定せずに開いたままにしておきます。
機能の使用
$data = array(array("cust_group" => 6, "price" => 13.21, "price_qty" => 5), array("cust_group" => 8, "price" => 15.25, "price_qty" => 4)、array("cust_group" => 8、"price" => 12.75、"price_qty" => 10)); $findKey = search_revisions($data,"8", "cust_group", "10", "price_qty"); print_r($findKey);
結果
配列 ( => 2)
/** * 単純および多次元の配列を検索 * @param type $needle * @param type $haystack * @return boolean */ public static function in_array_multi($needle, $haystack)( $needle = トリム($needle) ); if(!is_array($haystack)) false を返します; foreach($key=>$value)(if(is_array($value))(if(self::in_array_multi($needle, $value)) return True; else self::in_array_multi($needle, $value) else if(trim($value) === トリム($needle))(//可視性修正// error_log("$value === $ 針可視性) 1 に設定 非表示"); true を返します; ) ) False を返します; )
(PHP 5>=5.5.0) を使用している場合は、独自の関数を記述する必要はありません。この行を記述するだけで完了します。
1 つの結果だけが必要な場合:
$key = array_search(40489, array_column($userdb, "uid"));
複数の結果の場合
$keys = array_keys(array_column($userdb, "uid"), 40489);
コメントに記載されているように連想配列がある場合は、次のようにしてこれを行うことができます。
$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, "uid")),40489);
PHPを使用している場合<5.5.0, вы можете использовать этот backport , спасибо ramsey!
アップデート。 いくつかの簡単なテストを行っていますが、複数の結果フォームが最も高速であるようで、Jakub のカスタム関数よりもさらに高速です。
PHP の新しいバージョン (>=5.5.0) では、次のワンライナーを使用できます。
$key = array_search("100", array_column($userdb, "uid"));
@mayhem が作成した関数を拡張すると、( の一部に一致するだけであれば、この例はより「あいまい」検索になります) 大きいパート) 検索文字列:
関数 searchArrayKeyVal($sKey, $id, $array) (foreach ($array as $key => $val) (if (strpos(strto lower($val[$sKey]), strto lower(trim($id))) ! == false) ( return $key; ) ) return false )
たとえば、配列内の値は「ニューヨークへようこそ!」です。 必要なのは「New York!」の最初のコピーだけです。
配列内のすべての要素を検索する un 関数を使用する必要がありました。 そこで、Jakub Truneček が実行する関数を次のように変更しました。
関数 search_in_array_r($needle, $array) ( $found = array(); foreach ($array as $key => $val) ( if ($val == $needle) ( array_push($found, $val); ) ) if (count($found) != 0) $found を返し、それ以外の場合は null を返します。
$search1 = "デモ"; $search2 = "ボブ"; $arr = array("0" => "こんにちは","1" => "テスト","2" => "ジョン","3" => array("0" => "マーティン", "1 " => "ボブ")、"4" => "デモ"); foreach ($arr as $value) ( if (is_array($value)) ( if (in_array($search2, $value)) ( echo "成功しました"; // コードを実行します ) ) else ( if ($value) == $search1) ( echo "成功"; ) ) )
可能であれば、パラメータのタイプを入力します。 ただし、これは int、bool、float などの単純な型でのみ機能します。
$unsafe_variable = $_POST["user_id"]; $safe_variable = (int)$unsafe_variable ; mysqli_query($conn, "INSERT INTO テーブル (列) VALUES ("" . $safe_variable . "")");
配列内の値の検索は、データを扱うほぼすべての PHP アプリケーションおよびスクリプトで必要であり、そのためのメソッドや特別な関数が多数あります。 タスクと検索の種類に応じて、その機能、実行速度、使いやすさを考慮して、特定のツールを使用する必要があります。 次に、配列内の要素を検索するための PHP 関数、可能な構造とメソッドについて理解し、どのメソッドが最も速いかを調べます。
配列内で検索する関数:
配列検索- 配列内の値を検索するために使用されます。 成功した場合は、検索された値のキーを返します。何も見つからなかった場合は、FALSE を返します。 PHP 4.2.0 より前では、array_search() は失敗時に FALSE ではなく NULL を返しました。関数mixed array_search (mixed needle, array haystack [, bool strict])の構文。
foreach ($value としての配列式)
声明
foreach ($key => $value としての配列式)
声明foreach 構造を含む関数を使用して配列要素を検索し、成功した場合に TRUE を返す例
構築構文
その間 (式)
声明成功すると配列要素のキーを返します。
測定値の表から、関数が次のとおりであることがわかります。 配列検索、小さい配列と大きい配列の両方で検索した場合に最良の結果が表示されます。 同時に、ループを使用した検索時間は、配列のサイズに応じて大幅に増加します。
配列を操作するときの主な操作の 1 つは、特定の値を検索することです。 PHP の array_search() 関数は、このために設計されています。 1 次元コレクションと連想コレクションの両方を処理でき、配列内で見つかった場合は検索値のキーを返します。
構文
PHP の array_search() 関数の正式な説明は次のとおりです。
混合配列検索 (混合値、配列 $collection [、ブール厳密])
入力パラメータ:
- $collection - 検索が実行される配列。
- value - 任意のタイプの必要な値。
- strict は、厳密な型認識比較メカニズムを設定するオプションのブール フラグです。
動作の仕組み
PHP の array_search() 関数は、値を 1 つずつコレクション配列内のすべての値と比較します。 デフォルトでは、比較はオペランドの型に関係なく実行されます。 この設定は、strict フラグを TRUE に設定することで変更できます。 文字列の比較では大文字と小文字が区別されます。
一致するものが見つかった場合、見つかった要素に対応するキーが返され、関数の実行が停止します。 したがって、配列内の目的の値の複数の出現を検出するために使用することはできません。
一致するものが見つからない場合、関数はブール値 FALSE を返します。
厳密等価演算子 (===) を使用して、返された結果を確認する必要があります。 関数は 0 や空の文字列など、FALSE にキャストされた値を返す可能性があるため、これは重要です。
使用例
例 1. 多次元配列を PHP の array_search() 関数に渡す場合、作業の結果は検索された要素のキーになります。
"冬"、"シーズン2" => "春"、"シーズン3" => "夏"、"シーズン4" => "秋"); $result1 = array_search("冬", $array); $result2 = array_search("夏", $array); $result3 = array_search("4 月", $array); ?>
この例では、文字列「april」がソース配列に現れないため、$result1 は「season1」に設定され、$result2 は「season3」に設定され、$result3 はブール値 FALSE に設定されます。
例 2. PHP の array_search() 関数は、キーを次の数値インデックスとして考慮して、1 次元配列を処理することもできます。
$result 変数は、$array 内の「hunter」要素のインデックスに従って 1 に設定されます。
例 3. 結果の分析時にエラーが発生する可能性があります。
「ワシントン」、1 => 「アダムス」、2 => 「ジェファーソン」、3 => 「マディソン」、4 => 「モンロー」)。 $result = array_search("ワシントン", $大統領); if (!$result) ( echo "G. ワシントンは米国の初代大統領ではなかった"; ) ?>
したがって、結果を厳密に平等にチェックしないと、ジョージ ワシントンが米国の初代大統領ではなかったという予期せぬメッセージが得られる可能性があります。
例 4: 最初に見つかった一致のキーのみが返されます。
探している値が配列内に 3 回出現する場合でも、関数は最初に見つかった結果 (0) のみを返します。複数の一致を見つけるには、PHP array_keys() 関数を使用することをお勧めします。
(PHP 4 >= 4.0.5、PHP 5)
array_search -- 配列内の指定された値を検索し、成功した場合は対応するキーを返します。
説明
混合された 配列検索(混合針、配列干し草 [, bool strict])干し草の山から針の値を検索し、キーが配列内に存在する場合はキーを返します。 間違いさもないと。
コメント:針が文字列の場合、大文字と小文字を区別した比較が実行されます。
コメント: PHP 4.2.0までは、 配列検索()失敗した場合は返却される ヌルの代わりに 間違い .
値を渡す場合 真実 strict のオプションの 3 番目のパラメータとして、関数 配列検索()また、干し草の山の配列内の針のタイプもチェックします。
干し草の山に針が複数回存在する場合は、最初に見つかったキーが返されます。 見つかったすべての値のキーを返すには、関数を使用します。 配列キー()オプションの search_value パラメーターを使用します。
例1:使用例 配列検索()
|
注意 |
この関数はブール値として返すことができます 間違い、にキャストされる非ブール値 間違い、たとえば 0 または ""。 詳細については、「ブール型」セクションを参照してください。 === 演算子を使用して、この関数によって返される値を確認します。 |