Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Cekap Mencari Kunci Padanan Pertama dalam Tatasusunan PHP Berbilang Dimensi?

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

Barbara Streisand
Barbara Streisandasal
2024-10-31 05:49:01915semak imbas

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>
<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;;

}

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>
<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;
    }
}

}

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>
<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;
    }
}

}

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

// Use `$value` here

}

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!

Kenyataan:
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