Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Mencari Nilai Yang Dihubungkan dengan Kunci Khusus dalam Tatasusunan Berbilang Dimensi dengan Cekap?

Bagaimanakah Saya Boleh Mencari Nilai Yang Dihubungkan dengan Kunci Khusus dalam Tatasusunan Berbilang Dimensi dengan Cekap?

Susan Sarandon
Susan Sarandonasal
2024-11-04 14:44:58754semak imbas

How Can I Efficiently Find a Value Associated with a Specific Key in a Multidimensional Array?

Cari Nilai Kunci Padanan dalam Tatasusunan Berbilang Dimensi

Mencari kunci khusus dalam tatasusunan berbilang dimensi yang kompleks boleh menjadi tugas yang mencabar. Fungsi rekursif tersuai seperti yang disediakan cuba menangani cabaran ini. Namun, ia mungkin menghadapi masalah dengan pelaksanaan rekursinya.

Fungsi asal merentasi tatasusunan, mengembalikan nilai yang dikaitkan dengan kunci yang dicari jika ia ditemui. Walau bagaimanapun, jika nilai ialah tatasusunan (mewakili folder), ia secara rekursif memanggil dirinya sendiri pada sub-tatasusunan (timbunan jerami baharu). Rekursi ini boleh menjadi masalah.

Penyelesaian berpotensi melibatkan memanfaatkan RecursiveArrayIterator PHP. Dengan versi 5.6 dan lebih baru, menggunakan iterator ini menawarkan pendekatan yang lebih cekap dan boleh dipercayai:

function recursiveFind(array $haystack, $needle)
{
    $iterator  = new RecursiveArrayIterator($haystack);
    $recursive = new RecursiveIteratorIterator(
        $iterator,
        RecursiveIteratorIterator::SELF_FIRST
    );
    foreach ($recursive as $key => $value) {
        if ($key === $needle) {
            return $value;
        }
    }
}

Fungsi ini berulang secara rekursif, memeriksa kunci dan nilai di seluruh tatasusunan. Apabila menemui kunci padanan, ia mengembalikan nilai yang sepadan.

Sebagai alternatif, untuk PHP 5.6 dan ke atas, penjana boleh memudahkan pencarian berbilang kunci padanan:

function recursiveFind(array $haystack, $needle)
{
    $iterator  = new RecursiveArrayIterator($haystack);
    $recursive = new RecursiveIteratorIterator(
        $iterator,
        RecursiveIteratorIterator::SELF_FIRST
    );
    foreach ($recursive as $key => $value) {
        if ($key === $needle) {
            yield $value;
        }
    }
}

Dengan menggunakan penjana, anda boleh lelaran melalui semua nilai yang sepadan, bukan hanya yang pertama. Fungsi ini boleh terbukti berharga apabila mengendalikan tatasusunan yang kompleks dan bersarang dalam.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencari Nilai Yang Dihubungkan dengan Kunci Khusus dalam Tatasusunan Berbilang Dimensi dengan Cekap?. 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