strr vs str_replace를 사용하는 경우
언제가 언제인지 이해가 잘 안 돼요.strtr
보다 낫다str_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 문자열 대체 속도 비교에서 가져온) 다음 코드가 지정됩니다.
<?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"
string(27) "PHP: 하이퍼텍스트 프리프로세서"
주요 설명:
이 문제가 발생하는 이유는 다음과 같습니다.
strtr: 파라미터는 길이에 따라 내림차순으로 정렬되므로 다음과 같습니다.
- 가장 큰 것을 「중요」하게 해, 제목 텍스트 자체가 치환 어레이의 가장 큰 키이기 때문에, 번역됩니다.
- 제목 텍스트의 모든 문자가 대체되었기 때문에 프로세스는 여기서 종료됩니다.
str_replace: 키가 정의된 순서대로 동작하므로 다음과 같습니다.
- 제목 텍스트에서 키 "PHP"를 찾아 "PHP: Hypertext Preprocessor"로 대체하면 다음과 같은 결과를 얻을 수 있습니다.
"PHP: 하이퍼텍스트 프리프로세서:하이퍼텍스트 프리프로세서」를 참조.
그런 다음 이전 단계의 결과 텍스트에서 다음 키인 "PHP: Hypertext Preprocessor"를 찾기 때문에 "PHP"로 대체되어 다음과 같은 결과를 얻을 수 있습니다.
"PHP: 하이퍼텍스트 프리프로세서"
더 이상 찾을 키가 없기 때문에 교체는 거기서 끝납니다.
- 제목 텍스트에서 키 "PHP"를 찾아 "PHP: Hypertext Preprocessor"로 대체하면 다음과 같은 결과를 얻을 수 있습니다.
어느 쪽이든 같은 결과를 얻을 수 있을 것 같습니다.
반드시 그렇지만은 않습니다.제공하는 데이터의 검색과 치환에 따라 다릅니다.예를 들어, 두 기능이 다른 경우 다음을 참조하십시오.PHP str_replace에는 13자 이상의 제한이 있습니까?
strtr
는, 이미 교환이 끝난 문자열의 일부를 치환하지 않습니다.내부를 치환합니다.strtr
는 두 가장 긴합니다. 즉, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ)str_replace
를 왼쪽에서 오른쪽으로 바꿉니다.str_replace
행해진 할 수 .- 는 교환의 회수를 반환할 수 있습니다.strtr
는 이러한 카운트 값을 제공하지 않습니다.
생각에는strtr
의 인수와 보다 치환을 를 들어 문자열이a로 10인 bsecond 2로 합니다.예를 들어 문자열이 1인 경우 a로 치환하지만 문자열이 10인 경우 b로 치환합니다.이 수법은 다음 방법으로만 달성할 수 있습니다.strtr
.
$string = "1.10.0001";
echo strtr($string, array("1" => "a", "10" => "b"));
// a.b.000a
수동 STRTR -- 설명 문자열 strtr ( string $str , string $from , string $to ) string strtr ( string $str , array $replace _ pairs )3개의 인수를 지정하면 이 함수는 str의 복사본을 반환합니다.
STR_REPLACE--...검색 또는 치환이 어레이인 경우 해당 요소는 처음에서 마지막으로 처리됩니다.
STRTR은 다음 순서로 돌아가지 않지만 STR_REPLACE는 효과가 있습니다.
언급URL : https://stackoverflow.com/questions/8177296/when-to-use-strtr-vs-str-replace
'programing' 카테고리의 다른 글
Vue 라우터 링크: 형제 또는 자녀 관련 링크 (0) | 2022.09.28 |
---|---|
Java NIO 파일 채널과 FileOutputstream의 퍼포먼스/유용성 비교 (0) | 2022.09.28 |
Reflection in Unit 테스트를 사용하는 것은 잘못된 관행입니까? (0) | 2022.09.28 |
CNTLM에서의 프록시 배후에 pip 사용 (0) | 2022.09.28 |
각도란?JS는 jQuery와 다릅니다. (0) | 2022.09.28 |