Bagaimana untuk Cekap Mencari Kunci Padanan Pertama dalam Tatasusunan PHP Berbilang Dimensi?

Barbara Streisand
Lepaskan: 2024-10-31 05:49:01
asal
850 orang telah melayarinya

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

Menyelam ke dalam Traversal Tatasusunan Berbilang Dimensi: Temui Kunci Padanan Pertama

Dalam bidang pengaturcaraan PHP, melintasi tatasusunan multidimensi boleh menjadi tugas labirin . Apabila berhadapan dengan objektif untuk mendapatkan semula nilai yang dikaitkan dengan kunci padanan pertama, pembangun mungkin tersandung pada pendekatan rekursif. Satu kaedah sedemikian, yang digariskan di bawah, membentangkan kemungkinan perangkap dalam pelaksanaan rekursifnya:

<br>mencari fungsi peribadi($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;;
Salin selepas log masuk

}

Fungsi ini bertujuan untuk secara rekursif teroka tatasusunan bersekutu, mencari kunci yang sejajar dengan jarum yang dimasukkan dan mengembalikan nilai yang sepadan. Walau bagaimanapun, rekursi masih tidak lengkap, meninggalkan soalan tidak dijawab.

Merangkul PHP Moden untuk Penyelesaian Diperkemas

Dalam landskap PHP yang sentiasa berkembang, versi yang lebih baharu menawarkan lebih banyak pendekatan yang cekap dan elegan untuk traversal array. Pertimbangkan coretan berikut yang disesuaikan untuk PHP 5.6 dan ke atas:

<br>fungsi rekursifFind(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;
    }
}
Salin selepas log masuk

}

Ini kod yang dimodenkan menggunakan kuasa penjana untuk memudahkan proses lintasan rekursif. Ia melancarkan dengan lancar semua elemen tatasusunan, menapis jarum sebelum segera mengembalikan nilai yang sepadan.

Meluaskan Fungsi dengan Penjana

Kemunculan PHP 5.6 memperkenalkan penjana, memperkasakan pembangun untuk menghasilkan berbilang padanan daripada carian rekursif, bukan hanya yang pertama ditemui. Coretan berikut mempamerkan kefungsian yang dipertingkatkan ini:

<br>fungsi 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;
    }
}
Salin selepas log masuk

}

// Penggunaan
foreach (recursiveFind($haystack, $needle) sebagai $value) {

// Use `$value` here
Salin selepas log masuk

}

Sekarang, anda boleh mengulangi semua pasangan nilai kunci yang sepadan bukannya terhad pada perlawanan pertama. Ini memanjangkan kepelbagaian fungsi, membolehkan pengambilan data yang lebih komprehensif daripada tatasusunan berbilang dimensi.

Atas ialah kandungan terperinci Bagaimana untuk Cekap Mencari Kunci Padanan Pertama dalam Tatasusunan PHP Berbilang Dimensi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Artikel sebelumnya:Mengapa Saya Tidak Dapat Menemui \"vendor/autoload.php\": Panduan untuk Menyelesaikan Ralat Autoload Komposer Artikel seterusnya:Bagaimana untuk Semak sama ada Rentetan Bermula dengan Rentetan Khusus dalam PHP?
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Isu terkini
Topik-topik yang berkaitan
Lagi>
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!