Помощь с регулярным выражением для XML
Добрый день. Имеется следующий код на PHP, который извлекает значения атрибута name из XML-тегов param:
$xml = file_get_contents($url);
preg_match_all('/Данный код обрабатывает строки вида:
<param name="Срок гарантии" unit="мес.">36+24</param>В результате извлекается только значение атрибута name (например, «Срок гарантии»), и формируется массив этих значений.
Вопрос: Можно ли модифицировать регулярное выражение так, чтобы извлекать значения из двух атрибутов - name и unit - но только в том случае, если атрибут unit не пустой? Ожидаемый результат на выходе: «Срок гарантии, мес.».
Была предпринята попытка использовать следующее выражение:
preg_match_all('/Однако оно возвращает два отдельных массива. Каким образом можно объединить их или получить единый результат?
Решение: Чтобы получить желаемый формат (например, «Срок гарантии, мес.»), можно обрабатывать полученные массивы в цикле. Предположим, что после выполнения preg_match_all переменная $matches содержит:
$matches[1]- массив значений атрибутаname.$matches[2]- массив значений атрибутаunit.
Тогда для формирования итогового списка можно использовать следующий код:
$result = [];
foreach ($matches[1] as $index => $name) {
$unit = $matches[2][$index] ?? '';
$result[] = $name . ($unit ? ', ' . $unit : '');
}
$data['params'] = array_unique($result);Этот подход гарантирует, что если атрибут unit присутствует и не пуст, он будет добавлен через запятую; в противном случае будет использовано только значение name. Спасибо за внимание.