2014-10-29 2 views
-1
나는 간단한 PHP 코드를

의 PHP 않는 str_replace 버그

$myVariable = 1; 
$myVariable2 = str_replace(array(1, 2, 3), array('do 25 lat', 'od 26 do 35 lat', 'pow. 35 r.z.'), $myVariable); 
echo $myVariable2; 

그리고 결과를 실행 해요

은 다음과 같습니다

는 OD (26) 펑해야합니까. 35 r.z.5 lat5 위도

다른 PHP 버전을 확인했습니다. 어떤 아이디어?

+0

출력이 무엇을 기대하고 있어요? –

+0

가능한 [str \ replace with array] (http://stackoverflow.com/questions/13715826/str-replace-with-array) –

답변

3

당신은 문서에 지정된 잡았다에 떨어지는 피해자있어 - str_replace documentation

교체 주문 잡았다의 "노트"에서 볼

않는 str_replace()는 왼쪽에서 오른쪽으로 대체합니다

때문에, 그것을 여러 번 교체 할 때 이전에 삽입 된 값을 대체 할 수 있습니다. 이 문서의 예도 참조하십시오.

  1. 이 해당 문자열에서 할 25 위도
  2. , 2로 대체됩니다 : 당신이 두 번째 매개 변수로 배열을 통과으로

는 본질적으로 무슨 일이 일어나고 있는지, 연속 교체입니다으로 대체됩니다. do do do 35 lat, do do 26 do 35 lat5 lat

  • 해당 문자열에 이 pow로 대체되었습니다. 35 r.z. 당신이보고있는 최종 결과를 제공합니다.
  • 0

    이것은 str_replace 어레이 쌍이 차례로 적용되기 때문입니다.

    strtr을 시도해보십시오

    그것은 버그가 아니라
    $myVariable = 1; 
    $replacePairs = array(
        1 => "do 25 lat", 
        2 => "od 26 do 35 lat", 
        3 => "pow. 35 r.z." 
    ); 
    $myVariable2 = strtr($myVariable,$replacePairs); 
    echo $myVariable2; 
    
    0

    , 이것은 str_replace의 정상적인 동작입니다. 함수는 search 배열을 반복하고 발생을 발견 할 때마다 관련 replace으로 바꿉니다.

    따라서 :

    (search and match 1) 1 -> "do 25 lat" 
    (search and match 2) "do 25 lat" -> "do od 26 do 35 lat5 lat" 
    (search and match 3) "do od 26 do 35 lat5 lat" -> "do od 26 do pow. 35 r.z.5 lat5 lat"