栏目1
<li>
<a href="/article/110001.html">
<p class="article-img">
<img src="" src="/images/5.jpg" />
</p>
文章标题1
</a>
</li>
<li>
<a href="/article/110021.html">
<p class="article-img">
</p>
文章标题2
</a>
</li>
</ul>
</p>
<p class="cate">栏目2</p>
<li>
<a href="/article/130401.html">
<p class="article-img">
<img src="" src="/images/23.jpg" />
</p>
文章标题3
</a>
</li>
<li>
<a href="/article/114022.html">
<p class="article-img">
<img src="" src="/images/26.jpg" />
</p>
文章标题4
</a>
</li>
<li>
<a href="/article/123442.html">
<p class="article-img">
</p>
文章标题5
</a>
</li>
<li>
<a href="/article/12225.html">
<p class="article-img">
<img src="" src="/images/42.jpg" />
</p>
文章标题6
</a>
</li>
</ul>
</p>
.....此处相同简洁的代码
看上面的代码。想通过preg_match_all获取一个多维库存(含栏目,文章)
想得到类似结果如下:
每个栏目下的文章数不固定。
谢谢了。
迷茫2017-05-16 13:03:40
有点麻烦,不过还是匹配到你想要的结果
<?php
$str = '<p class="cate">栏目1</p>
<p class="article-list">
<ul>
<li>
<a href="/article/110001.html">
<p class="article-img">
<img src="" src="/images/5.jpg" />
</p>
<p class="article-name">文章标题1</p>
</a>
</li>
<li>
<a href="/article/110021.html">
<p class="article-img">
<img src="" src="/images/51.jpg" />
</p>
<p class="article-name">文章标题2</p>
</a>
</li>
</ul>
</p>
<p class="cate">栏目2</p>
<p class="article-list">
<ul>
<li>
<a href="/article/130401.html">
<p class="article-img">
<img src="" src="/images/23.jpg" />
</p>
<p class="article-name">文章标题3</p>
</a>
</li>
<li>
<a href="/article/114022.html">
<p class="article-img">
<img src="" src="/images/26.jpg" />
</p>
<p class="article-name">文章标题4</p>
</a>
</li>
<li>
<a href="/article/123442.html">
<p class="article-img">
<img src="" src="/images/89.jpg" />
</p>
<p class="article-name">文章标题5</p>
</a>
</li>
<li>
<a href="/article/12225.html">
<p class="article-img">
<img src="" src="/images/42.jpg" />
</p>
<p class="article-name">文章标题6</p>
</a>
</li>
</ul>
</p>';
$returnarr = array();
$str = preg_replace("/[\t\n\r]+/","",$str);
preg_match_all('/<p class="cate">(.*?)<\/p>/',$str,$rs);
preg_match_all('/<ul>(.*?)<\/ul>/',$str,$rscont);
foreach($rs[1] as $key=>$titleval) {
preg_match_all('/<a href="([^<>]+)">.*?<img src="" src="([^<>]+)".*?\/>.*?<p .*?>(.*?)<\/p>.*?<\/a>/',$rscont[1][$key],$list);unset($list[0]);
$content = array();
foreach($list[1] as $key=>$val) {
$cont = array($val,$list[2][$key],$list[3][$key]);
$content[] = $cont;
}
$returnarr[$titleval] = $content;
}
print_r($returnarr);