Попытка понять код, подобный следующему.
$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;
Итак, почему цикл … я скучаю по сюжету здесь? Или это имеет какую-то дополнительную выгоду?
В случае, если после замены слова результирующая строка может быть повторена.
Пример:
$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
Давайте сначала разберемся с переменной $ count в str_replace.
Он представляет количество раз замены подходящих ключевых слов.
В вышеприведенном случае в первом цикле $ count должен быть равен 4.
Поскольку $ count равен 4, цикл while продолжается. Строка str_replace снова запустится.
Во втором цикле, во втором запуске str_replace, не должно быть никакой замены вообще. $ count также станет 0, поскольку совпадений нет вообще. Все ключевые слова были заменены в первый раз.
Так что, по моему скромному мнению, второй цикл — это некое ненужное предупреждение, если str_replace не работает хорошо в первый раз. В противном случае второй цикл совершенно бессмыслен и бесполезен, потому что PHP редко допускает такую ошибку на этом функциональном уровне.