多次元 PHP 配列で最初に一致するキーを効率的に見つけるにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-31 05:49:01
オリジナル
850 人が閲覧しました

How to Efficiently Find the First Matching Key in a Multidimensional PHP Array?

多次元配列のトラバーサルの詳細: 最初に一致するキーを発見する

PHP プログラミングの領域では、多次元配列のトラバースは迷宮のようなタスクになる場合があります。最初に一致したキーに関連付けられた値を取得するという目的に直面した場合、開発者は再帰的なアプローチにつまずく可能性があります。以下に概説するそのようなメソッドの 1 つは、再帰的実装に潜在的な落とし穴があります。

<br>private function find($needle, $haystack) {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">foreach ($haystack as $name => $file) {
    if ($needle == $name) {
        return $file;
    } else if(is_array($file)) { //is folder
        return $this->find($needle, $file); //file is the new haystack
    }               
}

return &quot;did not find&quot;;
ログイン後にコピー

}

この関数は、連想配列を再帰的に探索し、入力された針と一致するキーを探し、その対応する値を返すことを目的としています。ただし、再帰は不完全なままであり、質問は未解決のままです。

合理化されたソリューションのための最新の PHP の採用

進化し続ける PHP 環境において、新しいバージョンではより多くの機能が提供されます。配列トラバーサルに対する効率的かつ洗練されたアプローチ。 PHP 5.6 以降向けに調整された次のスニペットを考えてみましょう:

<br>function recursiveFind(array $haystack, $needle)<br>{</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$iterator  = new RecursiveArrayIterator($haystack);
$recursive = new RecursiveIteratorIterator(
    $iterator,
    RecursiveIteratorIterator::SELF_FIRST
);
foreach ($recursive as $key => $value) {
    if ($key === $needle) {
        return $value;
    }
}
ログイン後にコピー

}

この最新化されたコードは、ジェネレーターの機能を利用して再帰的走査プロセスを簡素化します。すべての配列要素をシームレスに繰り返し、対応する値を即座に返す前にニードルをフィルタリングします。

ジェネレーターによる機能の拡張

PHP 5.6 の出現によりジェネレーターが導入され、機能が強化されました。開発者は、最初に見つかったものだけでなく、再帰的な検索から複数の一致を生成できるようになります。次のスニペットは、この強化された機能を示しています。

<br>function recursiveFind(array $haystack, $needle)<br>{</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$iterator  = new RecursiveArrayIterator($haystack);
$recursive = new RecursiveIteratorIterator(
    $iterator,
    RecursiveIteratorIterator::SELF_FIRST
);
foreach ($recursive as $key => $value) {
    if ($key === $needle) {
        yield $value;
    }
}
ログイン後にコピー

}

// 使用法
foreach (recursiveFind($haystack, $needle) as $value) {

// Use `$value` here
ログイン後にコピー

}

これで、次のことができます最初の一致に限定されるのではなく、一致するすべてのキーと値のペアを反復処理します。これにより関数の多用途性が拡張され、多次元配列からより包括的なデータを取得できるようになります。

以上が多次元 PHP 配列で最初に一致するキーを効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
前の記事:「vendor/autoload.php」が見つからない理由: Composer の自動ロード エラーを解決するためのガイド 次の記事:PHPで文字列が特定の文字列で始まるかどうかを確認するには?
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
関連トピック
詳細>
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!