PHP — preg_replace и str_replace заменяют только один раз внутри foreach

#replace #preg-replace #str-replace #glob

#заменить #preg-replace #str-replace #глоб

Вопрос:

У меня есть foreach, который использует функцию Glob для получения некоторых файлов .htm и, наконец, помещает это содержимое в одно echo.

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

Итак,

$juzgado_radicado генерирует число, подобное —> 004

$year_radicado генерирует число, подобное —> 2015

$radicado_radicado генерирует число, подобное —> 00911

Эти числа меняются в зависимости от foreach итерации, получающей новое имя файла.

Но в конце я использую preg_replace or str_replace , чтобы изменить фразу внутри документа each .htm, но вместо замены чисел на каждой итерации я получаю только один и тот же результат во всех заменах. Итак, я получаю что-то вроде «00911» во всех htm-файлах, и это должно быть что-то вроде «00911» и «00577» для примера.

Я не знаю, почему preg_replace и str_replace такое поведение внутри foreach цикла.

 $directory2 = "/Applications/XAMPP/xamppfiles/htdocs/tecnojuridica/finalizado/";
$array_filename = glob($directory2 . "*.htm");
$string = '';

foreach($array_filename as $filename)
    {
    $xml_file = file_get_contents($filename, FILE_TEXT);
    preg_match('/[0-9]{23}/', $filename, $match);
    $radicado = $match[0];

    // 002

    $juzgado_radicado = substr($radicado, -14, 3);

    // 2015

    $year_radicado = substr($radicado, -11, 4);

    // 00958

    $radicado_radicado = substr($filename, -7, 5);

    // Dom Object

    $dom = new DOMDocument('1.0', 'utf-8');
    $dom->xmlStandalone = true;
    $dom->loadHTML($xml_file);
    $content_node = $dom->getElementById("divrandom");
    $mega = $dom->saveXML($content_node);

    $string2 = preg_replace('/Datos del Proceso/', ' <font size="30"> <span style="background-color: #73A6FF; color: #fff; display: inline-block; padding: 3px 10px; font-weight: bold; border-radius: 5px;">' . $juzgado_radicado . '</span> <span style="background-color: #73A6FF; color: #fff; display: inline-block; padding: 3px 10px; font-weight: bold; border-radius: 5px;">' . $year_radicado . '</span> <span style="background-color: #73A6FF; color: #fff; display: inline-block; padding: 3px 10px; font-weight: bold; border-radius: 5px;">' . $radicado_radicado . ' </span> </font>', $mega);
    $string.= $mega . ',';
    }

echo utf8_decode($string2);
  

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

Ответ №1:

Я нашел ответ: вы должны заменить в начале цикла foreach не Dom Document объектами Php.

Если вы попытались произвести замену в Dom-объекты, возможно, это str_replace не удастся из preg_replace -за невозможности выполнить все итерации с разными данными замены.