将字符串拆分为关联数组

时间:2016-02-22 15:21:07

标签: php arrays regex split preg-split

示例字符串(html内容):

some content
<h2>title 1</h2>
<p>more content</p>
<h2>title 2</h2>
rest of the content

我需要通过<h2></h2>将其拆分为关联数组,同时保留字符串的所有内容。

期望的输出:

array(){
  'text1' => 'some content',
  'title1' => 'title 1',
  'text2' => '<p>more content</p>',
  'title2' => 'title 2',
  'text3' => 'rest of the content'
}

array(){
  [0] => {
    'text' => 'some content',
    'title' => 'title 1'
  },
  [1] => {
    'text' => '<p>more content</p>',
    'title' => 'title 2'
  },
  [2] => {
    'text' => 'rest of the content'
  }
}

我尝试了什么

带有preg_split()

PREG_SPLIT_DELIM_CAPTURE几乎完成了这项工作,但它输出了索引数组。
我尝试使用正则表达式,但无法捕获 text3
(.*?)(<h2.*?<\/h2>)

非常感谢任何帮助或想法。

2 个答案:

答案 0 :(得分:0)

你应该能够进行正则表达式分割:

preg_split ("/<\/?h2>/", sampletext)

这里的sampletext看起来就像你的输入示例。我们可以假设每2个拆分相当于一个<h2></h2>对,因此您可以根据它们的数组索引对它们进行标记。

答案 1 :(得分:0)

我快速为您提供了一个功能,它只是对您的内容进行了测试,但它可能会对您有所帮助。

<?php
function splitTitlesAndContent($needle1,$needle2,$content){
    $spli = explode($needle1,$content);
    $arr = array();
    $titlenum = 1;
    $contentnum = 1;

    foreach($spli as $spl){
        $expl = explode($needle2,$spl);

        if(isset($expl[1])){
            $arr['title' . $titlenum] = trim($expl[0]);
            $titlenum++;

            $arr['content' . $contentnum] = trim($expl[1]);
            $contentnum++;
        }
        else{
            $arr['content' . $contentnum] = trim($expl[0]);
            $contentnum++;
        }
    }
    return $arr;
}

$content = 'some content
<h2>title 1</h2>
more content
<h2>title 2</h2>
rest of the content';

$splitted = splitTitlesAndContent('<h2>','</h2>',$content);
print_r($splitted);
?>

您可以在此处试用:http://sandbox.onlinephpfunctions.com/code/e80b68d919c0292e7b52d2069128e21ba1614f4c