PHP текст в массив и с ключом - PullRequest
0 голосов
/ 22 июня 2011

Я плохо знаю RegExp, мне не удалось разбить строку на массив.

У меня есть строка вроде:

<h5>some text in header</h5>
some other content, that belongs to header <p> or <a> or <img> inside.. not important...
<h5>Second text header</h5>

Итак, я пытаюсь разбить текстовую строку на массив, где KEY будет текстом из заголовка, а CONTENT будет всем остальным содержимым до следующего заголовка, например:

массив ("некоторый текст в заголовке" => "некоторый другой контент, который принадлежит заголовку ...", ...)

Ответы [ 3 ]

2 голосов
/ 22 июня 2011

Я бы посоветовал взглянуть на PHP DOM http://php.net/manual/en/book.dom.php. Вы можете читать / создавать DOM из документа.

1 голос
/ 22 июня 2011

Я использовал это и наслаждался этим.

http://simplehtmldom.sourceforge.net/

Вы можете сделать это и с помощью регулярного выражения.

как то так.

/<h5>(.*)<\/h5>(.*)<h5>/s

но это только первая ситуация. вам придется разрезать строку, чтобы получить следующую.

как бы ты это ни резал, я не вижу ни одного лайнера для тебя. извините.

вот вонючий сломанный 4 лайнер.

$chunks = explode("<h5>", $html);
foreach($chunks as $chunk){
  list($key, $val) = explode("</h5>", $chunk);
  $res[$key] = $val;
}
0 голосов
/ 22 июня 2011

не анализировать HTML через preg_match, вместо этого использовать php Class

Класс DOMDocument

пример:

   <?php      
   $html= "<h5>some text in header</h5>
   some other content, that belongs to header <p> or <a> or <img> inside.. not important...
   <h5>Second text header</h5>";
   // a new dom object 
   $dom = new domDocument('1.0', 'utf-8'); 
   // load the html into the object ***/ 
   $dom->loadHTML($html); 
   /*** discard white space ***/ 
   $dom->preserveWhiteSpace = false; 
   $hFive= $dom->getElementsByTagName('h5'); 
   echo $hFive->item(0)->nodeValue; // u can get all h5 data by changing the index
   ?>

Ссылка

...