RegEx के साथ स्ट्रिंग प्लेसहोल्डर प्रतिस्थापन को अनुकूलित करना
फ़ंक्शन dynStr() का उद्देश्य किसी दिए गए स्ट्रिंग में प्लेसहोल्डर वेरिएबल्स को खोजना और बदलना है, जो द्वारा दर्शाया गया है मध्यम कोष्ठक। हालांकि यह सही ढंग से कार्य करता है, इसकी दक्षता और सरलता में सुधार किया जा सकता है।
dynStr() के साथ एक प्रमुख मुद्दा $matches के लिए इसकी डबल-सरणी संरचना में निहित है। वांछित डेटा तक पहुँचने के लिए दो फ़ोरैच लूप का उपयोग करना अक्षम है। आगे की प्रक्रिया की आवश्यकता के बिना प्लेसहोल्डर वेरिएबल को सीधे निकालने के लिए नियमित अभिव्यक्ति को सरल बनाने पर विचार करें:
preg_match_all('/{\w }/', $str, $matches);
अगला, प्लेसहोल्डर वेरिएबल्स को बदलने के लिए लूप को अनुकूलित किया जा सकता है। वर्तमान दृष्टिकोण कई स्ट्रिंग हेरफेर संचालन और सरणी लुकअप का उपयोग करता है, जिससे यह अनावश्यक रूप से जटिल हो जाता है:
foreach($match_group as $match) { // ... $str = ... }
एक सरल और अधिक संक्षिप्त विकल्प प्लेसहोल्डर को सीधे प्रतिस्थापित करते हुए एकल फ़ंक्शन कॉल का उपयोग करना है:
foreach($matches[0] as $match) { $str = strtr($str, [$match => $vars[strtolower($match)]]); }
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);
इन अनुकूलन को शामिल करने से अधिक कुशल और सुव्यवस्थित dynStr() फ़ंक्शन प्राप्त होता है:
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; }
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3