2012-12-05 22 views
30

मुझे एरे का उपयोग करते समय PHP फ़ंक्शन str_replace के साथ कुछ परेशानी हो रही है।सरणी के साथ str_replace

मैं इस संदेश है:

$message = strtolower("L rzzo rwldd ty esp mtdsza'd szdepw ty esp opgtw'd dple"); 

और मैं str_replace इस तरह उपयोग करने के लिए कोशिश कर रहा हूँ:

$new_message = str_replace(
    array('l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c','d','e','f','g','h','i','j','k'), 
    array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'), 
    $message); 

परिणाम A good glass in the bishop's hostel in the devil's seat होना चाहिए, लेकिन इसके बजाय, मैं p voos vlpss xn twt qxswop's wosttl xn twt stvxl's stpt मिलता है।

हालांकि, जब मैं केवल 2 पत्र की जगह की कोशिश यह उन्हें अच्छी तरह से बदल देता है:

$new_message = str_replace(array('l','p'), array('a','e'), $message); 

पत्र l और pa और e से बदल दिया जाएगा।

यह पूर्ण वर्णमाला सरणी के साथ क्यों काम नहीं कर रहा है यदि वे दोनों एक ही आकार के हैं?

उत्तर

28

str_replace सरणी के साथ क्रमशः सभी प्रतिस्थापन निष्पादित करता है। उन्हें एक बार में क्या करने के लिए strtr का उपयोग करें के बजाय:

$new_message = strtr($message, 'lmnopq...', 'abcdef...'); 
+1

ध्यान दें, आप ऊपरी और निचले मामले के लिए यह काम बस '$ new_message = strtr करके ('lmnopqrstuvwxyzabcdefghijkLMNOPQRSTUVWXYZABCDEFGHIJK', $ संदेश 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',) कर सकता है;' –

+0

@TheSmose धन्यवाद, मैं मैंने भी कहा है! – LautaroAngelico

33

क्योंकि str_replace() बाएं से दाएं की जगह ली, यह जब कई प्रतिस्थापन कर रही एक पहले से डाला मूल्य बदल सकता है।

 
    // Outputs F because A is replaced with B, then B is replaced with C, and so on... 
    // Finally E is replaced with F, because of left to right replacements. 
    $search = array('A', 'B', 'C', 'D', 'E'); 
    $replace = array('B', 'C', 'D', 'E', 'F'); 
    $subject = 'A'; 
    echo str_replace($search, $replace, $subject); 
+0

यह किसी अन्य उत्तर में पहले से दिया गया था (जो समस्या को हल करने के लिए भी होता है) से अधिक जानकारी प्रदान नहीं करता है। आपके लिए डाउनवोट –

+6

@TheSmose जैसा कि मैंने सवाल देखा था 'यह क्यों काम नहीं कर रहा है ...' और यह नहीं कि एक विकल्प क्या होगा। तो मैंने एक उदाहरण के साथ व्याख्या करने की कोशिश की, यह क्यों काम नहीं कर रहा था। –

+1

दूसरे उत्तर ने कहा कि "क्यों" आपने ऊपर पोस्ट किया है, ** और ** "इसे कैसे ठीक करें"। ** प्रश्न ** का आपका उत्तर कम से कम, ** समस्या ** को हल करने के प्रयास के बिना ** एसओ के अनाज के खिलाफ है। इसके अलावा, सवाल पहले से ही उत्तर दिया गया था और समस्या हल हो गई ... –

9

आसान और str_replace की तुलना में बेहतर:

<?php 
$arr = array(
    "http://" => "http://www.", 
    "w" => "W", 
    "d" => "D"); 

    $word = "http://desiweb.ir"; 
    echo strtr($word,$arr); 
?> 

strtr पीएचपी डॉकhere

+0

उन लोगों के लिए सोचने के लिए, परिस्थितियों के लिए स्ट्रिस्टर का उपयोग केस असंवेदनशील अनुप्रयोग की आवश्यकता होती है। – Tarquin

1

जवाब देने के लिए वैकल्पिक रूप से के रूप में सही चिह्नित, आप वर्ण आप कर सकते हैं के बजाय शब्दों को बदलने के लिए करता है, तो यह कोड के इस टुकड़े के साथ:

$query = "INSERT INTO my_table VALUES (?, ?, ?, ?);"; 
$values = Array("apple", "oranges", "mangos", "papayas"); 
foreach (array_fill(0, count($values), '?') as $key => $wildcard) { 
    $query = substr_replace($query, '"'.$values[$key].'"', strpos($query, $wildcard), strlen($wildcard)); 
} 
echo $query; 
यहाँ

डेमो: http://sandbox.onlinephpfunctions.com/code/56de88aef7eece3d199d57a863974b84a7224fd7