2012-12-05 55 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); 

字母lpae所取代。

如果它們的尺寸完全相同,爲什麼它不能與全字母數組配合使用?

回答

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

這不會提供比其他答案中已經提供的更多信息(這也可以解決問題)。 Downvote給你。 –

+6

@TheSmose當我看到問題是'爲什麼它不工作...',而不是什麼可以替代。所以我試着用一個例子來解釋,爲什麼它不起作用。 –

+1

另一個答案闡述了你在上面發佈的確切的「爲什麼」,**和**「如何解決它」。你以最簡單的方式回答**問題**,而不是試圖解決**問題**,反對SO的問題。此外,問題已經得到解答並且問題解決了...... –

9

容易和比str_replace

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

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

strtr PHP文檔here

+0

對於那些想知道的,stristr應該用於需要不區分大小寫的應用場景。 – 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