strtr против str_replace: когда использовать разные функции замены
В PHP функции strtr и str_replace могут выполнять замену строк. Однако выбор правильной функции зависит от конкретных требований и вариантов использования.
Контраст в порядке замены
Хотя в некоторых случаях конечный результат может выглядеть идентичным, существует тонкая разница между двумя функциями:
echo strtr('test string', 'st', 'XY'); // "YeXY XYring" echo str_replace(array('s', 't'), array('X', 'Y'), 'test string'); // "YeXY XYring"
strtr заменяет подстроки справа налево, а str_replace заменяет слева направо. Эта разница становится очевидной при замене перекрывающихся подстрок:
echo strtr('1 2 3 3', '1 2 3', 'XYZ'); // "1 2 3 Z" echo str_replace(array('1 2 3', '1 2'), array('XYZ', 'AB'), '1 2 3 3'); // "ABXYZ"
Замена ключей массива и нескольких подстрок
Другое различие заключается в том, как обрабатываются массивы замены:
$arr = array("1" => "A", "2" => "B", "3" => "C"); echo strtr('123', $arr); // "ABC" echo str_replace(array_keys($arr), array_values($arr), '123'); // "ABC"
В этом случае обе функции заменяют символы соответствующими значениями массива. Однако для strtr требуется ассоциативный массив с парами ключ-значение, а str_replace может работать с простыми массивами подстрок и замен.
Приоритет замены
strtr определяет приоритет замен на основе длина заменяемой подстроки в порядке убывания. Напротив, str_replace обрабатывает замены в порядке, определенном в массиве замен. Это может привести к различным результатам, как показано в следующем примере:
$text = "PHP: Hypertext Preprocessor"; $text_strtr = strtr($text, array("PHP: Hypertext Preprocessor" => "PHP", "PHP" => "PHP: Hypertext Preprocessor")); $text_str_replace = str_replace(array("PHP", "PHP: Hypertext Preprocessor"), array("PHP: Hypertext Preprocessor", "PHP"), $text); var_dump($text_strtr); // string(3) "PHP" var_dump($text_str_replace); // string(27) "PHP: Hypertext Preprocessor"
В заключение, и strtr, и str_replace предлагают разные подходы к замене строк в PHP. Понимание их тонких нюансов в поведении и синтаксисе поможет вам выбрать подходящую функцию для вашего конкретного случая использования.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3