Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Разбить строку на многомерный массив

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Из текста с HTML разметкой сделать многомерный массив
BelOFF
Отправлено: 19 Апреля, 2013 - 14:54:22
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Добрый День!

Есть текст:

CODE (html):
скопировать код в буфер обмена
  1. <h6>Заголовок №1</h6>
  2.  
  3. <p>Текст1</p>
  4. <p class="ss">Текст2</p>
  5. <p>Текст3</p>
  6.  
  7. <h6>Заголовок №2</h6>
  8.  
  9. <p>Текст4</p>
  10. <ul>
  11.   <li>пункт1</li>
  12.   <li>пункт2</li>
  13. </ul>
  14.  
  15. <h6>Заголовок №3</h6>
  16.  
  17. <p class="pp">Текст5</p>
  18. <p>Текст6</p>


Можно ли получить изящно массив такой структуры:

PHP:
скопировать код в буфер обмена
  1.    0 => array(
  2.        'h' => '<h6>Заголовок №1</h6>',
  3.        't' => '<p>Текст1</p><p class="ss">Текст2</p><p>Текст3</p>'
  4.    ),
  5.    1 => array(
  6.        'h' => '<h6>Заголовок №2</h6>',
  7.        't' => '<p>Текст4</p><ul><li>пункт1</li><li>пункт2</li></ul>'
  8.    ),
  9.    2 => array(
  10.        'h' => '<h6>Заголовок №3</h6>',
  11.        't' => '<p class="pp">Текст5</p><p>Текст6</p>'
  12.    ),
  13. );
 
 Top
armancho7777777 Супермодератор
Отправлено: 19 Апреля, 2013 - 15:12:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Спойлер (Отобразить)
PHP:
скопировать код в буфер обмена
  1.  
  2. $data = array();
  3.  
  4. if(
  5.         preg_match_all(
  6.                 '~\s*(?P<title><h6>.*?</h6>)\s*(?P<text>.*?)\s*(?=<h6>|$)~si',
  7.                 $html,
  8.                 $matches
  9.         )
  10. )
  11. {
  12.         foreach($matches['title'] as $key => $val)
  13.         {
  14.                 $data[] = array(
  15.                         'h' => $val,
  16.                         't' => $matches['text'][$key]
  17.                 );
  18.         }
  19. }
  20.  
  21. print_r($data);
  22.  

(Отредактировано автором: 19 Апреля, 2013 - 15:19:38)

 
 Top
BelOFF
Отправлено: 19 Апреля, 2013 - 15:25:15
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Вот это СПАСИБО....

Блин... сидел 2 дня над проблемой....

Спасибо тебе ГУРУ PHP - armancho7777777 .
 
 Top
armancho7777777 Супермодератор
Отправлено: 19 Апреля, 2013 - 15:31:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Да не за что ))
 
 Top
EuGen Администратор
Отправлено: 19 Апреля, 2013 - 15:50:12
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




PHP:
скопировать код в буфер обмена
  1. $rgResult = array_map(function($rgItem)
  2. {
  3.    return array('h'=>$rgItem[0], 't'=>$rgItem[1]);
  4. }, array_chunk(preg_split('/\<h\d\>([^<>]*)\<\/h\d\>/usmi', $sText, -1, 3),2));
  5. //var_dump($rgResult);


upd. Не актуально.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
armancho7777777 Супермодератор
Отправлено: 19 Апреля, 2013 - 16:43:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




EuGen, Вы всегда отличались изящным решением )
Но почему не

?

(Отредактировано автором: 19 Апреля, 2013 - 16:46:13)

 
 Top
EuGen Администратор
Отправлено: 19 Апреля, 2013 - 16:52:19
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Потому что в задаче нет условия проверки семантической правильности html-кода и не сказано, как должно себя вести разбиение в случае некорректных разделителей (и, значит, реализация остаётся на усмотрение решающего задачу), а вариант без проверки подргупп будет работать быстрее.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
armancho7777777 Супермодератор
Отправлено: 19 Апреля, 2013 - 16:54:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Ага, понял.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB