पहला अंतर:
के बीच एक अलग व्यवहार का एक दिलचस्प उदाहरण strtr
और str_replace
पीएचपी मैनुअल की टिप्पणी अनुभाग में है:
<?php
$arrFrom = array("1","2","3","B");
$arrTo = array("A","B","C","D");
$word = "ZBB2";
echo str_replace($arrFrom, $arrTo, $word);
?>
- मैं परिणाम के रूप में उम्मीद करूंगा: "ZDDB"
- हालाँकि, यह वापसी: "ZDDD" (क्योंकि हमारे सरणी के अनुसार B = D)
इस कार्य को करने के लिए, इसके बजाय "स्ट्रेट" का उपयोग करें:
<?php
$arr = array("1" => "A","2" => "B","3" => "C","B" => "D");
$word = "ZBB2";
echo strtr($word,$arr);
?>
इसका मतलब है कि str_replace
प्रतिस्थापन के लिए एक अधिक वैश्विक दृष्टिकोण है, जबकि strtr
बस एक-एक करके वर्णों का अनुवाद करता है।
एक और अंतर:
निम्नलिखित कोड को देखते हुए ( PHP स्ट्रिंग रिप्लेसमेंट स्पीड तुलना से लिया गया है ):
<?php
$text = "PHP: Hypertext Preprocessor";
$text_strtr = strtr($text
, array("PHP" => "PHP: Hypertext Preprocessor"
, "PHP: Hypertext Preprocessor" => "PHP"));
$text_str_replace = str_replace(array("PHP", "PHP: Hypertext Preprocessor")
, array("PHP: Hypertext Preprocessor", "PHP")
, $text);
var_dump($text_strtr);
var_dump($text_str_replace);
?>
पाठ की परिणामी लाइनें इस प्रकार होंगी:
स्ट्रिंग (3) "PHP"
स्ट्रिंग (27) "PHP: हाइपरटेक्स्ट प्रीप्रोसेसर"
मुख्य स्पष्टीकरण:
ऐसा इसलिए होता है क्योंकि:
स्ट्रेट : यह अपने मापदंडों को लंबाई के आधार पर क्रम से घटाता है, इसलिए:
- यह सबसे बड़े वाले को "अधिक महत्व" देगा, और फिर, जैसा कि विषय पाठ ही प्रतिस्थापन की सबसे बड़ी कुंजी है, इसका अनुवाद हो जाता है।
- क्योंकि विषय के सभी वर्ण बदल दिए गए हैं, इसलिए प्रक्रिया वहीं समाप्त हो जाती है।
str_replace : यह कुंजियों को परिभाषित करने के क्रम में काम करता है, इसलिए:
- यह विषय पाठ में कुंजी "PHP" पाता है और इसके साथ प्रतिस्थापित करता है: "PHP: हाइपरटेक्स्ट प्रीप्रोसेसर", जो परिणाम देता है:
"PHP: हाइपरटेक्स्ट प्रीप्रोसेसर: हाइपरटेक्स्ट प्रीप्रोसेसर"।
फिर यह अगली कुंजी पाता है: "PHP: हाइपरटेक्स्ट प्रीप्रोसेसर" पूर्व चरण के परिणामी पाठ में, इसलिए इसे "PHP" द्वारा प्रतिस्थापित किया जाता है, जो परिणाम के रूप में देता है:
"PHP: हाइपरटेक्स्ट प्रीप्रोसेसर"।
देखने के लिए कोई और चाबी नहीं है, इसलिए प्रतिस्थापन वहाँ समाप्त होता है।
strtr
आसानी से गलत हो सकता हैstrstr
जो कि काफी अलग है। मुझे लगने लगा है कि मैं डिस्लेक्सिक हूं। Str_replace के साथ वह गलती नहीं होगी।