2014-12-18 2 views
-1

встречаемости я хочу найти:PHP str_replace для каждого

<td>&nbsp;</td> 

Что 12x на странице отображается. и замените его переменной $ myvalue, массив, который содержит 12 значений.

первое вхождение:

<td>$myvalue[0]</td> 

второй встречаемости:

<td>$myvalue[1]</td> 

Т.Д.

Мне нужно это в какой-то функции поиска foreach, но не знаю, как это понять с помощью str_replace или preg_replace.

Кто-нибудь знает, как это решить? Благодарю.

Edit -> Моя новая идея:

$i=0; 
foreach($myvalue as $value) { 
str_replace('<td>$myvalue[$i]</td>',$new,$html); 
$i++; 
} 

Но я не знаю, как только заменить первое вхождение найдено с str_replace.

+0

На какой странице? Тот, который вы генерируете из того же PHP-скрипта, или если что-то еще, то что? Пожалуйста, покажите более подробную информацию. –

+0

Если это html-строка, попробуйте вместо этого использовать парсер HTML. – Ghost

+0

С помощью цикла используйте [strpos()] (http://php.net/strpos), чтобы найти один и [substr_replace()] (http://php.net/substr_replace) для замены, пока strpos не вернет false. – OIS

ответ

0

Используйте preg_match() и повторите по спирали.

Редактировать: Я нахожу, что PHP Live Regex - очень хороший способ написать мои регулярные выражения.

Попробуйте это:

<? 
$matches = preg_match_all("/<td>&nbsp;<\/td>/", $input_lines, $output_array); 
?> 
+0

Он, вероятно, не знает регулярное выражение. – OIS

+1

Да, вы правы Я попробовал, но я не могу найти регулярное выражение для него. Я пробовал:/  / – user3710844

+0

Спасибо, что сказали, что вы пробовали! Я добавил пример. Вам просто нужно было избежать '/'. – Jeff

0
$text = '<td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>'; 
$replacements = [1,2,3,4]; 

while ($replacements) { 
    $text = preg_replace('/&nbsp;/', array_shift($replacements), $text, 1); 
} 

тест пройден на 5.4.29. Обратите внимание, что это не проверяет граничные условия.