Неоднозначность с кейсом str_replace или заказ на замену - PullRequest
0 голосов
/ 25 июня 2011

Странная проблема с str_replace.

Вот мой код:

function replace_text($text) {
        $array = array(
        ':big' => 'BIG',
        ':bigs' => 'BIIIGSS',
        );

Проблема в том, что, когда я ввожу bigs (с s), код превращает текст только в BIGs, а не BIIIGSS.

Ответы [ 3 ]

1 голос
/ 25 июня 2011

Я сомневаюсь, что это ваш полный код, а просто вызов функции для функции, которая вызывает str_replace несколько раз?

Если это так, то вы, вероятно, сначала делаете первую замену, поэтому ваша строкаbigs теперь BIGs.Затем запускается ваша вторая замена, но теперь вы не можете найти строчную строку bigs.

str_replace заменяет слева направо, как говорится в руководстве.

1 голос
/ 25 июня 2011

Ну, большие тоже совпадают с большими, не так ли?Измените порядок, чтобы он сначала проверял, совпадают ли большие:

function replace_text($text) {
    $array = array(
    ':bigs' => 'BIIIGSS',
    ':big' => 'BIG',
    );
1 голос
/ 25 июня 2011

Попробуйте вместо этого использовать регистронезависимый str_ireplace().

Когда происходит переход ко второму элементу в массиве, значение равно BIGs, поэтому строчныеbigs отсутствует и поэтому не заменяется.

...