Вот что-то интересное, которое я только что узнал о str_replace(). В моей функции мне нужно сделать два запроса mysql, которые совпадают с небольшими изменениями при сортировке результата. В качестве аргумента я получаю строку, содержащую предложение порядка, например «фамилия ASC», но это может быть «фамилия DESC». Теперь я хотел бы легко переключиться на обратную сортировке с помощью str_replace, и я подумал, что это следует сделать трюк:Переключить текст с str_replace и массивами
str_replace(array('ASC', 'DESC'), array('DESC', 'ASC'), $subject)
На моем взгляде, он должен изменить все вхождения ASC с DESC и все вхождения DESC с ASC. Поскольку строка содержит только одну из двух, я должен получить предложение об отмене порядка. Однако это не так. Вывод вышеуказанного кода - это одна и та же строка.
Я сделал некоторые испытания и tourned, что эти вызовы делать то, что вы хотите их сделать:
str_replace('ASC', 'DESC', $subject)
str_replace(array('ASC'), array('DESC'), $subject)
На мой взгляд, это странно, потому что
array('ASC', 'DESC') != array('DESC', 'ASC')
Почему тогда PHP будет рассматривать этот как равный? Есть ли другой способ легко сделать такую замену?