Всем привет!!! Имеется два xml файла в первом имеется строки вида <ZAP><N_ZAP>1213</N_ZAP><PR_NOV>0</PR_NOV><PACIENT><ID_PAC>23E51179D4426A7A45258272004C964D</ID_PAC> и еще другого текста во втором строка вида <N_ZAP>1213</N_ZAP> без дополнительного текста как сравнить два файла и при нахождении строки 2 файла в части строки 1 файла, удалить из обоих файлов эти строки
Логика приблизительно такая: файлы можно привести к виду txt, удалив заголовки (это можно сделать ручками), затем из каждого файла сделать массив перебрав массив первого файла и массив второго, сравнить строки с условием содержания текста( из второго массива) в первом массиве в случае соответствия условию как то удалить строки до их переноса на новую (/r/n) Это реализуем на PHP?
есть функция file которая читает каждую строку и заносит в общий массив. Дальше можно в интернете найти "дублирующие значения в массиве"
эту часть я уже написал, перебираю(foreach) массив 1, внутри перебираю массив 2, сравниваю их значения, вот только не могу понять как найти значения, которые содержат строку <N_ZAP>1213</N_ZAP> игнорируя остальную часть текста до переноса строки, после этого применяю unset Вопрос: как найти значения, которые содержат строку <N_ZAP>1213</N_ZAP> игнорируя остальную часть текста до переноса строки
Вообщем как-то так, правда не уверен что это рабочий вариант --- Добавлено --- Код (Text): $one_file_name = "DFM830011S83005_19031.xml"; // Название первого файла $two_file_name = "VFM830011S83005_19031.xml"; // Название второго файла $one = file($one_file_name); // Открываем первый файл и заносим из него все строки в массив $two = file($two_file_name); // Открываем второй файл и заносим из него все строки в массив // Открываем первый файл для записи $file_write = fopen($one_file_name, "w"); $count = 0; foreach($one as $v_one) { foreach($two as $v_two) { if ($v_one == $v_two) { //Здесь нужно не сравнение, а значения, которые содержат строку из второго массива $del = unset($one[$v_one]); fwrite($file_write, $del); global $count++; } } } echo "Удалено " . $count . " совпадений"; // Закрываем первый файл fclose($file_write); --- Добавлено --- я не совсем знаком с синтаксисом думаю что запись fwrite($file_write, $del); - неверна
после отработки скрипта Код (Text): $one_file_name = "DFM830011S83005_19031.xml"; $two_file_name = "VFM830011S83005_19031.xml"; $one = file($one_file_name); $two = file($two_file_name); // Открываем первый файл для записи $file_write = fopen($one_file_name, "w"); $count = 0; for($i = 0; $i < (count($one) - 1); $i++) { echo($one[$i]); } данные первого файла удаляются полностью почему-то но выводит что там было --- Добавлено --- заносит в массив почему то удаляя все теги(((
PHP: <?php $name1 = 'DFM830011S83005_19031.xml'; $name2 = 'VFM830011S83005_19031.xml'; $array = array_unique ( array_merge ( file ( __DIR__ . DIRECTORY_SEPARATOR . $name1 ), file ( __DIR__ . DIRECTORY_SEPARATOR . $name2 ) ) ); foreach ( $array AS $k => $a ) { if ( strpos ( $a, '<N_ZAP>1213</N_ZAP>' ) !== false ) { unset ( $array[$k] ); } } print_r ( $array );
есть такой момент, что во 2 файле строки вида <N_ZAP>1213</N_ZAP>, могут содержать разные значения, к примеру <N_ZAP>105</N_ZAP>, <N_ZAP>10855</N_ZAP> --- Добавлено --- и не одно, а в каждой строке свое
Для работы с XML в PHP есть встроенные инструменты, разработанные специально для этого https://www.php.net/manual/ru/book.simplexml.php