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 ) ) ) )
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 }
Untuk melaksanakan fungsi yang diingini, anda boleh memanfaatkan fungsi explode():
$paths = explode(":", $indexPath); $itens = $myArray; foreach($paths as $ndx){ $itens = $itens[$ndx]; }
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!