求一个通过正则获取多维数组

startbbs
  • 256
<div class="cate">栏目1</div>
<div class="article-list">
    <ul>
        <li>
            <a href="/article/110001.html">
                <div class="article-img">
                    <img src="" data-original="/images/5.jpg" />
                </div>
                <p class="article-name">文章标题1</p>
            </a>
        </li>
        <li>
            <a href="/article/110021.html">
                <div class="article-img">
                    <img src="" data-original="/images/51.jpg" />
                </div>
                <p class="article-name">文章标题2</p>
            </a>
        </li>
    </ul>
</div>
<div class="cate">栏目2</div>
<div class="article-list">
    <ul>
        <li>
            <a href="/article/130401.html">
                <div class="article-img">
                    <img src="" data-original="/images/23.jpg" />
                </div>
                <p class="article-name">文章标题3</p>
            </a>
        </li>
        <li>
            <a href="/article/114022.html">
                <div class="article-img">
                    <img src="" data-original="/images/26.jpg" />
                </div>
                <p class="article-name">文章标题4</p>
            </a>
        </li>
        <li>
            <a href="/article/123442.html">
                <div class="article-img">
                    <img src="" data-original="/images/89.jpg" />
                </div>
                <p class="article-name">文章标题5</p>
            </a>
        </li>
        <li>
            <a href="/article/12225.html">
                <div class="article-img">
                    <img src="" data-original="/images/42.jpg" />
                </div>
                <p class="article-name">文章标题6</p>
            </a>
        </li>
    </ul>
</div>

.....此处省略相同的代码

看上面的代码.想通过preg_match_all获取一个多维数组(含栏目,文章)
想得类似结果如下:

array(
    '栏目1'=>array(
    array('/article/110001.html','/images/5.jpg','文章标题1'),
    array('/article/110021.html','/images/51.jpg','文章标题2'),
    ),
    '栏目2'=>array(
    array('/article/130401.html','/images/23.jpg','文章标题3'),
    array('/article/114022.html','/images/26.jpg','文章标题4'),
    array('/article/123442.html','/images/89.jpg','文章标题5'),
    array('/article/12225.html','/images/42.jpg','文章标题6'),
    ),

)

每个栏目下的文章数不固定.
谢谢了.

回复
阅读 2.1k
3 个回答

如果单用preg_match_all 的话是实现不了的,但是可以重新组合这样的数组。

也可以使用queryList ,百度一下你就知道。

推荐使用queryList 你这个数组使用正则实现不了不过可以正则匹配后自己拼接数组也是可以的

有點麻煩,不過還是匹配到你想要的結果

<?php
$str = '<div class="cate">栏目1</div>
<div class="article-list">
    <ul>
        <li>
            <a href="/article/110001.html">
                <div class="article-img">
                    <img src="" data-original="/images/5.jpg" />
                </div>
                <p class="article-name">文章标题1</p>
            </a>
        </li>
        <li>
            <a href="/article/110021.html">
                <div class="article-img">
                    <img src="" data-original="/images/51.jpg" />
                </div>
                <p class="article-name">文章标题2</p>
            </a>
        </li>
    </ul>
</div>
<div class="cate">栏目2</div>
<div class="article-list">
    <ul>
        <li>
            <a href="/article/130401.html">
                <div class="article-img">
                    <img src="" data-original="/images/23.jpg" />
                </div>
                <p class="article-name">文章标题3</p>
            </a>
        </li>
        <li>
            <a href="/article/114022.html">
                <div class="article-img">
                    <img src="" data-original="/images/26.jpg" />
                </div>
                <p class="article-name">文章标题4</p>
            </a>
        </li>
        <li>
            <a href="/article/123442.html">
                <div class="article-img">
                    <img src="" data-original="/images/89.jpg" />
                </div>
                <p class="article-name">文章标题5</p>
            </a>
        </li>
        <li>
            <a href="/article/12225.html">
                <div class="article-img">
                    <img src="" data-original="/images/42.jpg" />
                </div>
                <p class="article-name">文章标题6</p>
            </a>
        </li>
    </ul>
</div>';
$returnarr = array();
$str = preg_replace("/[\t\n\r]+/","",$str);  

preg_match_all('/<div class="cate">(.*?)<\/div>/',$str,$rs);
preg_match_all('/<ul>(.*?)<\/ul>/',$str,$rscont);
foreach($rs[1] as $key=>$titleval) {
    
    preg_match_all('/<a href="([^<>]+)">.*?<img src="" data-original="([^<>]+)".*?\/>.*?<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);


撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏