Program Tip

strtr과 str_replace를 언제 사용합니까?

programtip 2020. 10. 7. 08:06
반응형

strtr과 str_replace를 언제 사용합니까?


나는 언제 strtrstr_replace좋을지 또는 그 반대의 경우인지 이해하는 데 어려움을 겪고 있습니다 . 하위 문자열이 교체되는 순서가 반대로되어 있지만 두 함수를 사용하여 똑같은 결과를 얻을 수있는 것 같습니다. 예를 들면 :

echo strtr('test string', 'st', 'XY')."\n";
echo strtr('test string', array( 's' => 'X', 't' => 'Y', 'st' => 'Z' ))."\n";
echo str_replace(array('s', 't', 'st'), array('X', 'Y', 'Z'), 'test string')."\n";
echo str_replace(array('st', 't', 's'), array('Z', 'Y', 'X'), 'test string');

이 출력

YeXY XYring
YeZ Zring
YeXY XYring
YeZ Zring

구문 외에 다른 하나를 사용하면 이점이 있습니까? 원하는 결과를 얻기에 충분하지 않은 경우가 있습니까?


첫 번째 차이점 :

strtr사이의 다른 동작에 대한 흥미로운 예 str_replace는 PHP 매뉴얼의 주석 섹션에 있습니다.

<?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이기 때문에)

이 작업을 수행하려면 대신 "strtr"을 사용하십시오.

<?php
$arr = array("1" => "A","2" => "B","3" => "C","B" => "D");
$word = "ZBB2";
echo strtr($word,$arr);
?>
  • 다음을 반환합니다. "ZDDB"

이것은 str_replace대체에 대한보다 글로벌 한 접근 방식이며 strtr단순히 문자를 하나씩 번역 한다는 것을 의미합니다 .


또 다른 차이점 :

다음 코드 ( PHP String Replacement Speed ​​Comparison에서 가져옴 )가 주어집니다 .

<?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);
?>

결과 텍스트 줄은 다음과 같습니다.

string (3) "PHP"
string (27) "PHP : 하이퍼 텍스트 전 처리기"


주요 설명 :

이것은 다음과 같은 이유로 발생합니다.

  • strtr : 매개 변수를 길이별로 내림차순으로 정렬합니다.

    1. 가장 큰 것에 "더 많은 중요성"을 부여하고 제목 텍스트 자체가 대체 배열의 가장 큰 키이므로 번역됩니다.
    2. 제목 텍스트의 모든 문자가 교체 되었기 때문에 프로세스가 여기서 끝납니다.
  • str_replace: it works in the order the keys are defined, so:

    1. it finds the key “PHP” in the subject text and replaces it with: “PHP: Hypertext Preprocessor”, what gives as result:

      “PHP: Hypertext Preprocessor: Hypertext Preprocessor”.

    2. then it finds the next key: “PHP: Hypertext Preprocessor” in the resulting text of the former step, so it gets replaced by "PHP", which gives as result:

      “PHP: Hypertext Preprocessor”.

    3. there are no more keys to look for, so the replacement ends there.


It seems that it's possible to achieve the exact same results using either function

That's not always true and depends on the search and replace data you provide. For example where the two function differ see: Does PHP str_replace have a greater than 13 character limit?

  • strtr will not replace in parts of the string that already have been replaced - str_replace will replace inside replaces.
  • strtr will start with the longest key first in case you call it with two parameters - str_replace will replace from left to right.
  • str_replace can return the number of replacements done - strtr does not offer such a count value.

I think strtr provides more flexible and conditional replacement when used with two arguments, for example: if string is 1, replace with a, but if string is 10, replace with b. This trick could only be achieved by strtr.

$string = "1.10.0001";  
echo strtr($string, array("1" => "a", "10" => "b"));  
// a.b.000a  

see : Php Manual Strtr.


Notice in manual STRTR-- Description string strtr ( string $str , string $from , string $to ) string strtr ( string $str , array $replace_pairs ) If given three arguments, this function returns a copy of str where ...

STR_REPLACE-- ... If search or replace are arrays, their elements are processed first to last. ...

STRTR each turn NOT effect to next, BUT STR_REPLACE does.

참고URL : https://stackoverflow.com/questions/8177296/when-to-use-strtr-vs-str-replace

반응형