html в массив

Тема в разделе "Регулярные выражения", создана пользователем Wertos, 6 янв 2016.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. Wertos

    Wertos Постоялец

    Регистр.:
    13 апр 2007
    Сообщения:
    145
    Симпатии:
    27
    Есть html
    HTML:
    Origin: Hungary <br><br> Agency:<br><br> Other Name:babs, Barbara, Barbara B, Barbie B, Gianna, Ginger, Ginger B, <br> Debut year: 2006<br><br> Debut age: 21 years old<br><br> Breast: Small<br><br> Birthday: 27/06/1985<br><br> Hair Color: Brown<br><br> Tattoos: <br> Flower on left stomach<br><br> Piercings: <br><br> Forum Thread
    Возможно ли привести данный код к массиву ключ -> значение, например
    "Other Name" => "babs, Barbara, Barbara B, Barbie B, Gianna, Ginger, Ginger B"
     
  2. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
    PHP:
    $elements explode('<br><br>'$str);
    $array = array()
    foreach(
    $elements as $element){
        
    $els explode(':'$element);
        
    $array[trim($els[0])] = trim($els[1]);
    }
     
  3. Wertos

    Wertos Постоялец

    Регистр.:
    13 апр 2007
    Сообщения:
    145
    Симпатии:
    27
    Но там есть и одиночный <br>
     
  4. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
    Код:
    $elements = explode('<br>', $str);
    $array = array()
    foreach($elements as $element){
        if(trim($element) === '') continue;
       
        $els = explode(':', $element);
        $array[trim($els[0])] = trim($els[1]);
    }
     
  5. javx

    javx

    Регистр.:
    28 авг 2015
    Сообщения:
    519
    Симпатии:
    236
    тебе регулярным выражением извлечь то что перед двоеточием и то что после? https://regex101.com/r/nY8cC3/1 здесь заполненные атрибуты спарсились.
     
  6. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
    Agency, Tattoos и Piercings не попадают
     
  7. Wertos

    Wertos Постоялец

    Регистр.:
    13 апр 2007
    Сообщения:
    145
    Симпатии:
    27
    Наверное я вопрос не так поставил... Код работает но там может ещё и вот так быть
    Код:
    Origin: Brazil <br><br> Agency: <br><br><br> Other Name:, Abby Lee, Abby Lee Brazil, <br> Debut year: 2014<br><br> Debut age: 25 years old<br><br> Breast: Big<br><br> Birthday: 1989-09-08<br><br> Hair Color: Brown<br><br> Tattoos: <br> Flower on right stomach<br> Flowers on left side<br> Dinosaur on left buttock<br><br> Piercings: Navel, clit<br><br> Forum Thread  
    т.е. Tattoos там 3 шт и они должны быть в значении.
    Наверное надо обсуждение на время прекратить, до тех пор пока я не приведу код к лучшему варианту... Слишком много разных вариантов
     
  8. javx

    javx

    Регистр.:
    28 авг 2015
    Сообщения:
    519
    Симпатии:
    236
    Так и было задумано, просто я не понимаю что конкретно нужно ТС
     
  9. Wertos

    Wertos Постоялец

    Регистр.:
    13 апр 2007
    Сообщения:
    145
    Симпатии:
    27
    Вот привёл код к такому виду
    HTML:
    Origin: Brazil<br>Agency:<br>Other Name:, Abby Lee, Abby Lee Brazil,<br>Debut year: 2014<br>Debut age: 25 years old<br>Breast: Big<br>Birthday: 1989-09-08<br>Hair Color: Brown<br>Tattoos:<br>Flower on right stomach<br>Flowers on left side<br>Dinosaur on left buttock<br>Piercings: Navel, clit<br>Forum Thread  
    И вот вылазят кое где типа Tattoos... должно примерно так быть
    "Tattoos" => "Flower on right stomach,Flowers on left side,Dinosaur on left buttock"
    Запятые не обязательны, хоть что нибудь...
     
  10. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    352
    Симпатии:
    223
    PHP:
    echo '<pre>';


    $str '<br>'.'Origin: Brazil<br>Agency:<br>Other Name:, Abby Lee, Abby Lee Brazil,<br>Debut year: 2014<br>Debut age: 25 years old<br>Breast: Big<br>Birthday: 1989-09-08<br>Hair Color: Brown<br>Tattoos:<br>Flower on right stomach<br>Flowers on left side<br>Dinosaur on left buttock<br>Piercings: Navel, clit<br>Forum Thread  ';

    preg_match_all("#\<br\>([a-z\s]*)\:#ui"$str$matches);

    foreach(
    $matches[1] as $m)
    {
        
    $str str_replace($mstr_replace(' ''\s'$m), $str);
    }

    $a1 = array(':''<br>');
    $a2 = array(': '' ');

    $str str_replace($a1$a2$str);
    $str strip_tags($str);
    $elements explode(' '$str);
    $array = array();

    print_r($elements);

    foreach(
    $elements as $element){
        if(
    trim($element) === '') continue;
     
        if(
    strpos($element':'))
            
    $key substr(str_replace('\s'' '$element), 0, -1);
        else
        {
            
    $array[$key] = isset($array[$key]) ? $array[$key].' '.trim(str_replace('<br>'' '$element)) : trim(str_replace('<br>'' '$element));
        }
    }

    print_r($array);
     
    Последнее редактирование: 7 янв 2016
Статус темы:
Закрыта.