搜索

首页  >  问答  >  正文

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

栏目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获取一个多维库存(含栏目,文章)
想得到类似结果如下:

<前><代码>数组( '栏目1'=>数组( array('/article/110001.html','/images/5.jpg','文章标题1'), array('/article/110021.html','/images/51.jpg','文章标题2'), ), '栏目2'=>数组( 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'), ), )

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

漂亮男人漂亮男人2773 天前552

全部回复(3)我来回复

  • 漂亮男人

    漂亮男人2017-05-16 13:03:40

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

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

    回复
    0
  • 高洛峰

    高洛峰2017-05-16 13:03:40

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

    回复
    0
  • 迷茫

    迷茫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);
    
    
    

    回复
    0
  • 取消回复