Помощь с регулярным выражением для 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. Спасибо за внимание.