Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/40: Рейтинг темы: голосов - 40, средняя оценка - 4.63
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932

strtr() и str_replace()

05.08.2010, 14:37. Показов 9421. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В чём разница между strtr() и str_replace()? Вроде они выполняют одинаковые действия.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.08.2010, 14:37
Ответы с готовыми решениями:

Как лучше всего заменить strtr для мультибайта
Я так понимаю для латиницы (символы букв и %&<>'" ...) можно не искать замену ?? Но есть и другие наборы и нужно найти максимально...

Недоступна страница, strtr
Такая проблема, помогите разораться. 2205-Putin-v-pyatnitsu-vstretitsya-s-laureatami-konkursa-"Uchitel-goda-Rossii" Из за каких...

str_replace
в тексте встречаются такие вот последовательности ( –, –. – , – . – – ), и я с помощью str_replace хочу их убрать ...

16
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
05.08.2010, 15:09
Совсем нет. Первая меняет символы из набора, вторая подстроку.
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
05.08.2010, 15:14
PHP
1
2
3
4
5
$str = 'foo bar';
$a = 'foo';
$b = 'bar';
echo strtr($str, array($a => $b, $b => $a)); // bar foo
echo str_replace(array($a, $b), array($b, $a), $str); // foo foo
strtr() наиболее быстро работает при посимвольной замене (для чего она и был изначально предназначена). При более сложных заменах 'foo' на 'bar' и 'bar' на 'foo' она весьма медленна.

str_replace() при множественных заменах каждый раз начинает сначала (эквивалентно последовательным поштучным заменам).
1
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
05.08.2010, 15:24  [ТС]
strtr я понял, а str_replace - нет. Каким образом эта функция работает в твоём примере... да и вообще, что в неё только массивы можно отправлять как аргументы?
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
05.08.2010, 16:02
PHP
1
2
3
$search = array('foo', ..., 'qwe');
$replace = array('bar', ..., 'asd');
echo str_replace($search, $replace, $str);
то же самое, что и
PHP
1
2
3
$str = str_replace('foo', 'bar', $str);
...
$str = str_replace('qwe', 'asd', $str);
0
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
05.08.2010, 16:29  [ТС]
Vovan-VE, извини, но я не очень понял. Это заменит все элементы массива $search на элементы массива $replace, да? А strtr что не может так?
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
05.08.2010, 16:40
str_replace() да, заменяет по порядку сначал все $search[0] на $replace[0], Затем в полученной строке все $search[1] на $replace[1] и т.д. каждый раз всю строку проходит с начала.

strtr() проходит всю строку только один раз.

Если в строке 'foo bar' заменить все a на o и одновременно все o на a то:
str_replace() выдаст 'faa bar'
strtr() выдаст 'faa bor'
2
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
05.08.2010, 17:03  [ТС]
И ещё один пример ты не мог бы сделать, Vovan-VE?
Цитата Сообщение от Vovan-VE Посмотреть сообщение
str_replace() выдаст 'faa bar'
Почему bar? bor ведь. В strtr надо массивы что ли отправлять аргументами?
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
05.08.2010, 17:13
Hagrael, Как делает strtr("foo bar", 'ao', 'oa'): Находит 'o', заменяет на 'a'. Идет дальше, надожит следующее 'o', заменет на 'a'. Идет дальше, находит 'a', заменяет на 'o'. Идет дальше, а искать негде. Получилось "faa bor"

Как делает str_replace(..., "foo bar"). Заменяет во всей строке все 'a' на 'o', получается промежуточный вариант "foo bor". Заменяет снова во всей строке все 'o' на 'a', получается "faa bar". Больше искать нечего.
0
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
05.08.2010, 19:21  [ТС]
Vovan-VE, насчёт str_replace я понял. А strtr не очень... Он ищет "оа" и заменяет на "ао" или он ищет "о" и заменяет на "а", а потом наоборот? Можете привести ещё один пример (без массивов желательно)?
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
05.08.2010, 19:32
Посимвольная замена 'а' -> 'А', и т.д.
PHP
1
echo strtr('ПрЕвеД', 'абвгд..я', 'АБВГД..Я');
0
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
05.08.2010, 19:43  [ТС]
Я кажется понял!
Вот код:
PHP
1
2
3
$text="hi all, I said hello";
$text_after_str_replace=str_replace(array("hello","hi"),array("hi","hello"),$text); //Выведет "hello all, Isaid hello"
$text_after_strtr=strtr($text,array("hi"=>"hello","hello"=>"hi")); //Выведет "hello all, I said hi"
Тоесть strtr ищет все переменные сразу один раз, а str_replace - по очереди! СПАСИБО ВСЕМ!

Добавлено через 1 минуту
Vovan-VE, а когда пишешь
PHP
1
echo strtr(array("hello"=>"hi","hello h"));
Он же высветит "hi h"?

Добавлено через 4 минуты
Vovan-VE, ][aкер, МЕГАБИГСЕНКС!!!! РАБОТАЕТ!
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
05.08.2010, 19:46
strtr() имеет две формы
string strtr(string $string, string $from, string $to) - для поcимвольной замены
string strtr(string $string, array $replacements) - для подстрок
0
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
05.08.2010, 19:50  [ТС]
Vovan-VE, как понять "посимвольной"?

Добавлено через 1 минуту
Vovan-VE, я разобрался! ещё раз спасибо!
0
0 / 0 / 0
Регистрация: 12.04.2015
Сообщений: 5
14.11.2015, 06:58
strtr строка поиска толка один раз а мне нужен ещё раз. Например два или три
Как это сделано?
0
0 / 0 / 0
Регистрация: 27.10.2024
Сообщений: 2
27.01.2025, 23:03
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Посимвольная замена 'а' -> 'А', и т.д.
PHP
1
echo strtr('ПрЕвеД', 'абвгд..я', 'АБВГД..Я');
А здесь как работает код, куда делась 'р'?
У меня выводит :
//ПЀЕВеД
0
926 / 549 / 291
Регистрация: 07.11.2022
Сообщений: 899
28.01.2025, 01:11
Цитата Сообщение от Petrovmlq Посмотреть сообщение
А здесь как работает код, куда делась 'р'?
Скорее всего у вас скрипт в utf-8.

Чтобы работало, как в примере, нужно чтобы строки в скрипте были в однобайтовой кодировке (чтобы каждая буква в строках занимала один байт, а не несколько, как происходит для кириллицы в utf-8). Например, windows-1251.

Для этого можно либо сам скрипт сохранить в этой кодировке либо конвертировать используемые строки из utf-8 в windows-1251 перед обработкой, а потом обратно в utf-8 для вывода.

Не по теме:

А вообще для преобразования строки в верхний регистр есть более простые средства вроде

PHP
1
2
echo mb_strtoupper('ПрЕвеД');
// выведет: ПРЕВЕД

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.01.2025, 01:11
Помогаю со студенческими работами здесь

str_replace
Добрался до функции str_replace. Использовал: $replacement=array('копейка','кпьё','копендос'); $feedback=str_replace($replacement,'ВАЗ...

str_replace
запутался так, что самому не выбраться, помогите) работает без проблем: $rus = array('А', 'а', 'Б', 'б', 'В', 'в', 'Г', 'г', 'Д', 'д',...

Ereg_replace и str_replace
ereg_replace и str_replace! В чем отличия?

Скобки и str_replace
Добрый день. Такая заморочка. Делаю замену всех пробелов в строке на <SP> $text=str_replace(" ", "<SP>",...

Не работает str_replace()
$sql_link = mysql_query("SELECT * FROM `pages` WHERE `id`='".$_GET."'"); $row = mysql_fetch_assoc($sql_link); $bb_content =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru