Конвертировать HTML <dl>во вложенный массив с помощью PHP - PullRequest
0 голосов
/ 04 июня 2018

Я ищу способ преобразования списка определений HTML <dl> во вложенный массив с помощью PHP.

Пример списка:

<dl>
  <dt>A</dt>
    <dd>A1</dd>
  <dt>B</dt>
    <dd>B1</dd>
    <dd>B2</dd>
</dl>

Предпочтительный вывод:

[ 'A' => ['A1'], 'B' => ['B1', 'B2'] ]

Я уже нашел решение jQuery ( Превращение HTML

), которое работает (почти) так, как я хочу, но НО я работаю надПроект без jQuery и поэтому хотел бы сделать то же самое только с PHP.

Я также уже рассматривал PHP-функции, такие как XML_PARSE_INTO_STRUCT, но, к сожалению, я не могу найти работающее решение с ним.

Так что я в настоящее время застрял с моим поиском.Кто-нибудь может дать мне указатель в правильном направлении?

1 Ответ

0 голосов
/ 04 июня 2018

Вы можете просто сделать это, используя чистый JS, не используя jQuery.

        function dlToObject(dl){
            if(!dl){
                return {};
            }

            var elems  = dl.querySelectorAll('dl dt, dl dd'),
                parent = '',
                result = {};

            for(var i=0; i<elems.length; i++){
                var element = elems[i];

                if(element.tagName.toLowerCase() == 'dt'){
                    parent = element.innerText;
                    result[parent] = [];
                }else{
                    result[parent].push(element.innerText)
                }
            }

            return result;
        }

        var myDl = document.querySelector('dl');

        console.log(dlToObject(myDl)); //{'A':['A1'],'B':['B1', 'B2']}
...