preg_match_all成简单的数组 [英] preg_match_all into simple array

查看:125
本文介绍了preg_match_all成简单的数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有preg_match_all功能:

I have preg_match_all function:

preg_match_all('#<h2>(.*?)</h2>#is', $source, $output, PREG_SET_ORDER);

它的工作如预期,但问题是,它preg_matches所有项目两次,成为一个巨大的多维数组像这样的例子在那里,如预期,preg_matched所有11个项目需要的,但两次,成多维数组:

It's working as intended, BUT the problem is, it preg_matches all items twice and into a huge multi dimensional array like this for example where it, as intended, preg_matched all 11 items needed, but twice and into a multidimensional array:

Array
(
    [0] => Array
        (
            [0] => <h2>10. <em>Cruel</em> by St. Vincent</h2>
            [1] => 10. <em>Cruel</em> by St. Vincent
        )

    [1] => Array
        (
            [0] => <h2>9. <em>Robot Rock</em> by Daft Punk</h2>
            [1] => 9. <em>Robot Rock</em> by Daft Punk
        )

    [2] => Array
        (
            [0] => <h2>8. <em>Seven Nation Army</em> by the White Stripes</h2>
            [1] => 8. <em>Seven Nation Army</em> by the White Stripes
        )

    [3] => Array
        (
            [0] => <h2>7. <em>Do You Want To</em> by Franz Ferdinand</h2>
            [1] => 7. <em>Do You Want To</em> by Franz Ferdinand
        )

    [4] => Array
        (
            [0] => <h2>6. <em>Teenage Dream</em> by Katie Perry</h2>
            [1] => 6. <em>Teenage Dream</em> by Katie Perry
        )

    [5] => Array
        (
            [0] => <h2>5. <em>Crazy</em> by Gnarls Barkley</h2>
            [1] => 5. <em>Crazy</em> by Gnarls Barkley
        )

    [6] => Array
        (
            [0] => <h2>4. <em>Kids</em> by MGMT</h2>
            [1] => 4. <em>Kids</em> by MGMT
        )

    [7] => Array
        (
            [0] => <h2>3. <em>Bad Romance</em> by Lady Gaga</h2>
            [1] => 3. <em>Bad Romance</em> by Lady Gaga
        )

    [8] => Array
        (
            [0] => <h2>2. <em>Pumped Up Kicks</em> by Foster the People</h2>
            [1] => 2. <em>Pumped Up Kicks</em> by Foster the People
        )

    [9] => Array
        (
            [0] => <h2>1. <em>Paradise</em> by Coldplay</h2>
            [1] => 1. <em>Paradise</em> by Coldplay
        )

    [10] => Array
        (
            [0] => <h2>Song That Get Stuck In Your Head YouTube Playlist</h2>
            [1] => Song That Get Stuck In Your Head YouTube Playlist
        )

)

如何数组转换成简单的,没有那些重复的项目?非常感谢你。

How to convert this array into simple one and without those duplicated items? Thank you very much.

推荐答案

您总是会得到一个多维数组回来了,不过,你可以得到接近你想要这样的:

You will always get a multidimensional array back, however, you can get close to what you want like this:

if (preg_match_all('#<h2>(.*?)</h2>#is', $source, $output, PREG_PATTERN_ORDER))
    $matches = $output[0]; // reduce the multi-dimensional array to the array of full matches only

如果你不希望子匹配的话,那么使用非捕获分组:

And if you don't want the submatch at all, then use a non-capturing grouping:

if (preg_match_all('#<h2>(?:.*?)</h2>#is', $source, $output, PREG_PATTERN_ORDER))
    $matches = $output[0]; // reduce the multi-dimensional array to the array of full matches only

请注意,这个调用preg_match_all使用preG_PATTERN_ORDER代替preG_SET_ORDER:

Note that this call to preg_match_all is using PREG_PATTERN_ORDER instead of PREG_SET_ORDER:

preG_PATTERN_ORDER结果排序使得$ matches [0]是一个数组
  全模式匹配,$匹配[1]是匹配的字符串数组
  第一个括号中的子模式,等等。

PREG_PATTERN_ORDER Orders results so that $matches[0] is an array of full pattern matches, $matches[1] is an array of strings matched by the first parenthesized subpattern, and so on.

preG_SET_ORDER结果排序使得$ matches [0]是第一个数组
  比赛集,$匹配[1]为第二组匹配的数组,
  等等。

PREG_SET_ORDER Orders results so that $matches[0] is an array of first set of matches, $matches[1] is an array of second set of matches, and so on.

请参阅:<一href=\"http://php.net/manual/en/function.$p$pg-match-all.php\">http://php.net/manual/en/function.$p$pg-match-all.php

这篇关于preg_match_all成简单的数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆