Mengoptimumkan Penggantian Pemegang Tempat Rentetan dengan RegEx
Fungsi dynStr() bertujuan untuk mencari dan menggantikan pembolehubah pemegang tempat dalam rentetan tertentu, dilambangkan dengan kurungan kerinting. Walaupun ia berfungsi dengan betul, kecekapan dan kesederhanaannya boleh dipertingkatkan.
Satu isu utama dengan dynStr() terletak pada struktur tatasusunan dua untuk $matches. Menggunakan dua gelung foreach untuk mengakses data yang dikehendaki adalah tidak cekap. Pertimbangkan untuk memudahkan ungkapan biasa untuk mengekstrak terus pembolehubah pemegang tempat tanpa memerlukan pemprosesan selanjutnya:
preg_match_all('/{\w+}/', $str, $matches);
Seterusnya, gelung untuk menggantikan pembolehubah ruang letak boleh dioptimumkan. Pendekatan semasa menggunakan beberapa operasi manipulasi rentetan dan carian tatasusunan, menjadikannya tidak perlu rumit:
foreach($match_group as $match) { // ... $str = ... }
Alternatif yang lebih mudah dan lebih ringkas ialah menggunakan panggilan fungsi tunggal, menggantikan pemegang tempat secara terus:
foreach($matches[0] as $match) { $str = strtr($str, [$match => $vars[strtolower($match)]]); }
Fungsi strtr() melaksanakan berbilang penggantian dengan cekap dengan mentakrifkan pemetaan antara pembolehubah pemegang tempat dan nilai sepadannya dalam tatasusunan $vars.
Selain itu, fungsi boleh dibuat tidak peka huruf besar-kecil dengan menukar kedua-dua pembolehubah pemegang tempat dan kekunci tatasusunan kepada huruf kecil, menghapuskan keperluan untuk pemprosesan tambahan:
$allowed = array_keys(array_change_key_case($vars, CASE_LOWER)); ... $str = (in_array(strtolower($match), $allowed)) ? str_replace("{".$match_up."}", $vars[strtolower($match)], $str) : str_replace("{".$match_up."}", '', $str);
Menggabungkan pengoptimuman ini menghasilkan fungsi dynStr() yang lebih cekap dan diperkemas:
function dynStr($str,$vars) { preg_match_all('/{\w+}/', $str, $matches); foreach($matches[0] as $match) { $vars = array_change_key_case($vars, CASE_LOWER); $str = strtr($str, [$match => $vars[strtolower($match)]]); } return $str; }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Penggantian Pemegang Tempat Rentetan Menggunakan Ungkapan Biasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!