連想配列は PHP の基本的なデータ構造であり、開発者はキーと値のペアを保存できます。これらは多用途であり、構造化データを表すためによく使用されます。 PHP 連想配列内の特定の要素を検索するのは一般的なタスクです。ただし、PHP で使用できるほとんどのネイティブ関数は、単純な配列でもうまく機能します。
このため、連想配列で同じことを実行できる関数の組み合わせを見つける必要があることがよくあります。おそらくメモリ不足エラーは発生しませんか ?.
このチュートリアルでは、PHP 連想配列内の値を検索するためのさまざまな方法とテクニックを検討します。
array_key_exists() 関数は、特定のキーが連想配列に存在するかどうかを確認します。キーが見つかった場合は true を返し、それ以外の場合は false を返します。
$fruits = [ 'apple' => 'red', 'banana' => 'yellow', ]; if (array_key_exists('banana', $fruits)) { echo "The key 'banana' exists in the array."; } else { echo "The key 'banana' does not exist in the array."; }
array_search() 関数は、連想配列内の値を検索し、見つかった場合は対応するキーを返し、見つからない場合は false を返します。
$colors = [ 'apple' => 'red', 'banana' => 'yellow', ]; echo array_search('yellow', $colors); // Print "banana"
より複雑なデータを含む配列を値として使用することもできます:
$colors = [ 'apple' => ['red'], 'banana' => 'yellow', ]; echo array_search(['red'], $colors); // Print "apple"
この場合、厳密比較モードを使用することをお勧めします。 3 番目のブール値パラメータを array_search:
に渡してリクエストできます。
echo array_search(['red'], $colors, true);
array_search() に似ているのは、項目のキーの代わりにブール値フラグを返す in_array 関数です。
/* * It also supports strict mode comparison, useful for working with structured data as a value. */ echo in_array(['red'], $colors, true); // Return "true"
foreach ループを使用して連想配列を反復処理し、特定の値を手動で検索できます。これは、ループが配列の同じスコープ内に存在するため、ループ内のすべてのデータにアクセスできるため、複雑な比較や操作を行う必要がある場合に便利です。
$targetValue = 'yellow'; foreach ($colors as $key => $value) { if ($value === $targetValue) { echo "The value {$targetValue} is associated with the key {$key}."; break; // Optional: Stop searching after finding the occurrence. } }
array_filter() 関数を使用すると、配列をフィルタリングし、テスト コールバックを渡す要素のみを返すことができます。
$colors = [ 'apple' => 'red', 'banana' => 'yellow', ]; $filteredArray = array_filter($colors, function ($value) { return $value === 'red'; }); /* * It contains just one element: ['apple' => 'red'] * ‘banana’ was filtered out. */ var_dump($filteredArray);
パフォーマンスが懸念事項の 1 つである場合は、記事のこのセクションが間違いなく興味深いものになるでしょう。
array_map と foreach ループを使用して、200,000 項目の配列に対して単純な操作を実行するスクリプトを作成しました。Inspector パッケージを使用して、2 つのステートメントのパフォーマンスをトレースしました。このサンドボックスでコードを試すことができます: https://phpsandbox.io/e/x/5titt
$data = range(1, 200000); $inspector->addSegment(function () use ($data) { array_map(fn($item) => $item * 3, $data); }, 'array_map'); $data = range(1, 200000); $inspector->addSegment(function () use ($data) { foreach ($data as $item) { $data[$item] = $item * 3; } }, 'foreach');
数十回の実行により、foreach は array_map よりも一貫して約 10% 優れていることがわかりました。
しかし、この結果はコンテキスト環境に応じて大きく変わる可能性があります。上にリンクされたサンドボックスでスニペットを実行すると、foreach が array_map よりも 10 倍効率的であることがわかります。スクリプトをローカル環境にコピーして、自分用のベンチマークを作成できます。
とにかく、一般的に foreach が array_map よりも効率的である理由は、コールバックの使用を意味しないからです。同じスコープ内で配列を直接使用するよりも、関数を呼び出す方がオーバーヘッドが大きくなります。このため、array_map は反復ごとにもう少し多くの時間を浪費します。ただし、これは大規模なデータセットでのみ表示されます。配列が小さいほど、ギャップは小さくなります。
Inspector は、ソフトウェア開発者向けに特別に設計されたコード実行監視ツールです。サーバー レベルで何もインストールする必要はありません。composer パッケージをインストールするだけで準備完了です。
他の複雑なオールインワン プラットフォームとは異なり、Inspector は非常に簡単で、PHP に優しいです。 Laravel または Symfony パッケージを試すことができます。
効果的な自動化、深い洞察、アラートや通知をメッセージング環境に転送する機能をお探しの場合は、Inspector を無料でお試しください。アカウントを登録してください。
または、Web サイトで詳細をご覧ください: https://inspector.dev
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3