preg_replace не работает внутри цикла

Я анализирую канал RSS и пытаюсь удалить определенный бит одного из его элементов, чтобы он не отображался.

<pre>M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q1.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q10.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q11.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q12.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q13.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q14.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q15.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q2.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q3.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q4.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q5.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q6.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q7.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q8.htm M /WITHHELD/WITHHELD/dist/gameserver/data/html-en/quests/_419_GetaPet/419_q9.htm M /WITHHELD/WITHHELD/dist/gameserver/data/scripts/quests/_128_PailakaSongofIceandFire.java M /WITHHELD/WITHHELD/dist/gameserver/data/scripts/quests/_129_PailakaDevilsLegacy.java M /WITHHELD/WITHHELD/dist/gameserver/data/scripts/quests/_144_PailakaInjuredDragon.java M /WITHHELD/WITHHELD/dist/gameserver/data/scripts/quests/_311_ExpulsionOfEvilSpirits.java M /WITHHELD/WITHHELD/dist/gameserver/data/scripts/quests/_312_TakeAdvantageOfTheCrisis.java M /WITHHELD/WITHHELD/dist/gameserver/data/scripts/quests/_642_APowerfulPrimevalCreature.java M /WITHHELD/WITHHELD/dist/gameserver/data/scripts/quests/_643_RiseAndFallOfTheElrokiTribe.java M /WITHHELD/WITHHELD/dist/gameserver/data/stats/items/15400-15499.xml M /WITHHELD/WITHHELD/dist/gameserver/data/stats/items/700-799.xml M /WITHHELD/WITHHELD/dist/gameserver/data/stats/npc/22600-22699.xml</pre>

По сути, я хочу удалить <pre> теги и все что между ними.

Я использую следующее preg_replace:

preg_replace("/(<pre>.*<\/pre>)/", "", $str);

Это работает когда у меня есть строка, содержащая бит, который я хочу удалить как статическая переменная, но Это не когда я пытаюсь заменить его внутри цикла вывода RSS:

    $i = 1;

foreach($rs['items'] as &$item) {
$arr = array($i);
$a = array_fill_keys($arr, (string)$item['description']);
$desc = (string)$a[$i];
$desc = preg_replace("/(<pre>.*<\/pre>)/", "", $desc);

echo "\t<li><a href=\"$item[link]\">(".$i.")".$item['title']."</a><br />";
echo $desc;
echo "</li>\n";
$i++;
}

По плохо написанному фрагменту кода вы, вероятно, можете сказать, что я в полной растерянности и перепробовал множество способов сделать эту работу.

описание ($ desc) узел остается неизменным, даже когда я пытаюсь сохранить весь вывод как переменную ($ HTM) и затем запустите preg_replace.

Есть идеи?

Заранее спасибо.

0

Решение

Чтобы сохранить изменения, вы должны пройти по ссылке, используя его как &$ пункт вместо $ пункт как это:

foreach($rs['items'] as &$item) //Pass by reference using "&"{
$arr = array($i);
$a = array_fill_keys($arr, (string)$item['description']);
$desc = (string)$a[$i];
$desc = preg_replace("/(<pre>.*<\/pre>)/", "", $desc);

$htm .= "\t<li><a href=\"$item[link]\">(".$i.")".$item['title']."</a><br />";
$htm .= replace($desc);
$htm .= "</li>\n";
$i++;
$item['description'] = $desc; //Add this
}

Это должно работать. Дай мне знать, если это еще не так.

Редакция:
Просто добавь $ item [‘description’] = $ desc; в конце цикла, как указано выше.

0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector