تحسين استبدال العنصر النائب للسلسلة باستخدام RegEx
تهدف الوظيفة dynStr () إلى البحث عن متغيرات العنصر النائب واستبدالها في سلسلة معينة، يُشار إليها بـ بين قوسين مجعد. على الرغم من أنه يعمل بشكل صحيح، إلا أنه يمكن تحسين كفاءته وبساطته.تكمن إحدى المشكلات الرئيسية في dynStr() في هيكل الصفيف المزدوج لمطابقات $. يعد استخدام حلقتين foreach للوصول إلى البيانات المطلوبة أمرًا غير فعال. خذ بعين الاعتبار تبسيط التعبير العادي لاستخراج متغير العنصر النائب مباشرة دون الحاجة إلى مزيد من المعالجة:preg_match_all('/{\w }/', $str, $matches);
preg_match_all('/{\w }/', $str, $matches);التالي، يمكن تحسين الحلقة لاستبدال متغيرات العنصر النائب. يستخدم الأسلوب الحالي العديد من عمليات معالجة السلسلة وعمليات البحث عن المصفوفات، مما يجعلها معقدة بشكل غير ضروري:foreach($match_group as $match) { // ... $ شارع = ...
preg_match_all('/{\w }/', $str, $matches);البديل الأبسط والأكثر إيجازًا هو استخدام استدعاء دالة واحدة، واستبدال العنصر النائب مباشرة:foreach($matches[0] as $match) { $str = strtr($str, [$match => $vars[strtolower($match)]]);
preg_match_all('/{\w }/', $str, $matches);تنفذ الدالة strtr() عمليات استبدال متعددة بكفاءة عن طريق تحديد التعيين بين متغيرات العنصر النائب والقيم المقابلة لها في مصفوفة $vars.بالإضافة إلى ذلك، يمكن جعل الدالة غير حساسة لحالة الأحرف عن طريق تحويل كل من متغيرات العنصر النائب ومفاتيح المصفوفة إلى أحرف صغيرة، مما يلغي الحاجة إلى معالجة إضافية:$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);
$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);يؤدي دمج هذه التحسينات إلى وظيفة dynStr() أكثر كفاءة وانسيابية:function dynStr($str,$vars) { preg_match_all('/{\w }/', $str, $matches); foreach($matches[0] كـ $match) { $vars = array_change_key_case($vars, CASE_LOWER); $str = strtr($str, [$match => $vars[strtolower($match)]]); } إرجاع $str;
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3