Перебрать таблицу

Тема в разделе "Регулярные выражения", создана пользователем davyduck, 13 окт 2017.

  1. davyduck

    davyduck

    Регистр.:
    18 дек 2012
    Сообщения:
    610
    Симпатии:
    114
    Есть таблица

    Код:
    <td>Бренд</td>
    <td><a class="margin-left-20" href="?action=listUnits&catalog=op1210&vehicleid=47960&params=&infoVI=40L0AHM45591&ssd=$HQwXcmQEeQJyfHtcUE8ARVnEg$">OPEL</a></td>
    <td>Модель</td>
    <td><a class="margin-left-20" href="?action=errUnits&catalog=op1210&vehicleid=47960&ams=&infoVI=40L0dfdff591&ssd=$HQwXdfdfdfdfdd
    
    Хочу данные первой ячейки сделать ключем массива, а данные второй ячейчи - значением.
    Как правильно получить значения с помощью регулярки?
    Делал так -
    Код:
    preg_match_all('#<td>(.+?)</td>#s', $table, $keys);
    Но в переменную $keys попадают и данные второй ячейки.

    Посоветуйте что-нибудь
     
  2. zabolots

    zabolots Постоялец

    Регистр.:
    11 сен 2012
    Сообщения:
    54
    Симпатии:
    21
    То, что туда попадают все ячейки, не удивительно – нет никаких ограничивающих условий. Но вам так-то и нужны все – и первые (ключи) и вторые (значения). Один из вариантов – поместить все в массив (сейчас у вас это $keys) и после средствами php обработать его, как нужно.
     
  3. davyduck

    davyduck

    Регистр.:
    18 дек 2012
    Сообщения:
    610
    Симпатии:
    114
    А можно как-то задать правила в регулярке, что если нету <a></a> - попадало в $keys, а если есть <a></a> - попадало в $value . Проблема в том, что количество таких ячеек не известно, для каждой марки авто, модели приходят разные значения. И если все загнать как у меня, не совсем удобно работать
    <-------------- добавлено через 1387 сек. -------------->
    В $values попадает такое

    Код:
    Array
    (
        [0] => Array
            (
                [0] => OPEL
                       
                                                                   
                            Каталог
                            op1210
                       
                                                                   
                            Название
                            ZAFIRA-B
                       
                                                                                               
                            ID транспортного средства
                            47960
                        
     
  4. zabolots

    zabolots Постоялец

    Регистр.:
    11 сен 2012
    Сообщения:
    54
    Симпатии:
    21
    Можно двумя выражениями, например так:
    PHP:
    preg_match_all('/<td><a.+>(.+)\/a><\/td>/s'$table$values); // значения 
    preg_match_all('/<td>([^<].+)<\/td>/s'$table$keys); // ключи
    <-------------- добавлено через 618 сек. -------------->
    ну, наверное это соответствует содержимому всей таблицы? Вы же только ее начало привели в первом посте, там таких полей нет.