str_replace с использованием массива

Попытка понять код, подобный следующему.

$line = 'This line has a cat ant goat dog monkey rat and ape';
$animals = array( 'cat', 'dog', 'monkey', 'rat' );

$count = 1;
while ($count)
{
$line = str_replace( $animals, '', $line, $count );
}

echo $line;

Я не могу понять необходимость петли здесь. Следующее, кажется, дает те же результаты.

$line = 'This line has a cat ant goat dog monkey rat and ape';
$animals = array( 'cat', 'dog', 'monkey', 'rat' );

$line = str_replace( $animals, '', $line, $count );

echo $line;

Итак, почему цикл … я скучаю по сюжету здесь? Или это имеет какую-то дополнительную выгоду?

0

Решение

В случае, если после замены слова результирующая строка может быть повторена.

Пример:

$line = 'aaaaaaaaa';
$animals = array( 'aaa');

$count = 1;
while ($count)
{
$line = str_replace( $animals, 'a', $line, $count );
}

echo $count . '<br>' . $line; //result a

$line = 'aaaaaaaaa';
$animals = array( 'aaa');

$line = str_replace( $animals, 'a', $line, $count );

echo $count . '<br>' . $line; //result aaa
0

Другие решения

Давайте сначала разберемся с переменной $ count в str_replace.

Он представляет количество раз замены подходящих ключевых слов.

В вышеприведенном случае в первом цикле $ count должен быть равен 4.

Поскольку $ count равен 4, цикл while продолжается. Строка str_replace снова запустится.

Во втором цикле, во втором запуске str_replace, не должно быть никакой замены вообще. $ count также станет 0, поскольку совпадений нет вообще. Все ключевые слова были заменены в первый раз.

Так что, по моему скромному мнению, второй цикл — это некое ненужное предупреждение, если str_replace не работает хорошо в первый раз. В противном случае второй цикл совершенно бессмыслен и бесполезен, потому что PHP редко допускает такую ​​ошибку на этом функциональном уровне.

-1

По вопросам рекламы [email protected]