Bagaimanakah saya boleh mengakses nilai tertentu dalam tatasusunan kompleks menggunakan rentetan sebagai laluan indeks tanpa bergantung pada eval() atas sebab keselamatan?

Susan Sarandon
Lepaskan: 2024-10-26 17:15:30
asal
784 orang telah melayarinya

How can I access specific values in a complex array using a string as an index path without relying on eval() for security reasons?

Cara Mengakses Nilai Tatasusunan Menggunakan Rentetan sebagai Laluan Indeks

Jika anda mempunyai tatasusunan dengan struktur yang kompleks, anda mungkin menghadapi perlu mengakses nilai tertentu menggunakan rentetan yang mewakili laluan ke nilai tersebut. Menggunakan eval() tidak disyorkan kerana potensi kelemahan keselamatan. Sebaliknya, adalah mungkin untuk mencipta fungsi tersuai yang boleh mengendalikan tugas ini.

Pertimbangkan tatasusunan contoh berikut:

Array
(
    [0] => Array
        (
            [Data] => Array
                (
                    [id] => 1
                    [title] => Manager
                    [name] => John Smith
                )
         )
    [1] => Array
        (
            [Data] => Array
                 (
                     [id] => 1
                     [title] => Clerk
                     [name] =>
                         (
                             [first] => Jane
                             [last] => Smith
                         )
                 )

        )

)
Salin selepas log masuk

Anda boleh mewujudkan fungsi yang mengambil rentetan sebagai laluan indeks dan tatasusunan untuk diakses sebagai input:

function($indexPath, $arrayToAccess)
{
    // $indexPath would be something like [0]['Data']['name'] which would return 
    // "Manager" or it could be [1]['Data']['name']['first'] which would return 
    // "Jane" but the amount of array indexes that will be in the index path can 
    // change, so there might be 3 like the first example, or 4 like the second.

    return $arrayToAccess[$indexPath] // <- obviously won't work
}
Salin selepas log masuk

Untuk melaksanakan fungsi yang diingini, anda boleh memanfaatkan fungsi explode():

$paths = explode(":", $indexPath); 
$itens = $myArray;
foreach($paths as $ndx){
    $itens = $itens[$ndx];
}
Salin selepas log masuk

Dalam contoh ini, $pathStr mewakili input laluan rentetan, dan $myArray ialah tatasusunan yang anda mahu akses. Kod ini berulang melalui elemen $paths, yang merupakan subrentetan yang dipisahkan oleh titik bertindih (:) dalam $indexPath dan mengemas kini $itens dengan nilai pada $ndx dalam lelaran $itens semasa.

Sebagai Hasilnya, $itens akan mengandungi nilai yang anda cari daripada tatasusunan, berdasarkan laluan rentetan yang ditentukan. Kaedah ini lebih selamat dan lebih fleksibel daripada menggunakan eval(), kerana ia tidak melibatkan pelaksanaan kod PHP secara dinamik.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengakses nilai tertentu dalam tatasusunan kompleks menggunakan rentetan sebagai laluan indeks tanpa bergantung pada eval() atas sebab keselamatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
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!