preg_match_all 进入简单数组

2024-01-23

我有 preg_match_all 函数:

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

它按预期工作,但问题是,它对所有项目进行了两次 preg_matches 并放入一个巨大的多维数组中,如下所示,例如,按照预期,preg_matches 所需的所有 11 个项目,但两次并放入多维数组中:

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
        )

)

如何将这个数组转换为简单的数组并且没有那些重复的项目?非常感谢。


你总是会得到一个多维数组,但是,你可以像这样接近你想要的:

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

如果您根本不需要子匹配,则使用非捕获分组:

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:

PREG_PATTERN_ORDER 对结果进行排序,以便 $matches[0] 是一个数组 完整模式匹配,$matches[1] 是匹配的字符串数组 第一个带括号的子模式,依此类推。

PREG_SET_ORDER 对结果进行排序,以便 $matches[0] 是第一个的数组 一组匹配,$matches[1] 是第二组匹配的数组,并且 很快。

See: http://php.net/manual/en/function.preg-match-all.php http://php.net/manual/en/function.preg-match-all.php

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

preg_match_all 进入简单数组 的相关文章

  • 为什么java中LinkedList没有initialCapacity?

    我想知道为什么LinkedList没有initialCapacity 我知道什么时候使用ArrayList什么时候LinkedList 定义集合最终大小的好习惯是 List
  • 如何使用 phpunit 运行单个测试方法?

    我正在努力运行一个名为testSaveAndDrop在文件中escalation EscalationGroupTest php with phpunit 我尝试了以下组合 phpunit EscalationGroupTest escal
  • 如何解压 PHP/Lumen/Laravel 的 gzip 请求?

    我收到来自第三方的 gzip 编码文本请求 1mb 所以这是有道理的 我的测试路线 router gt post testgzip function Illuminate Http Request request decompressed
  • 在 php 中为类自动生成 getter 和 setter 的最佳方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我经常创建一个包含一些私有变量的类 当设置此类的实例时 应该可以使用 getter 和 setter 填充该类的所有变量 有没有一种简单的方法可
  • PHP 会话不适用于游戏

    我正在尝试模仿一款名为 SKUNK 用骰子玩 的游戏来完成一项作业 我无法让会话正常工作 这是我第一次使用 PHP 我还被告知无需会议即可完成 这是我的代码
  • Android:如何在播放媒体(mp3)时在特定毫秒内显示文本

    我正在尝试做一个类似卡拉 OK 的应用程序 我想在某一毫秒到来时显示一个或多个单词 例如 1148 毫秒 gt 打印 尼古拉斯 1826 毫秒 gt 打印 是 2766 毫秒 gt 打印 旧 ms gt 显示 这是我的代码 包 com ex
  • 如何在响应ajax codeigniter后停止执行其他控制器

    我想知道如何在响应输出 json 数据后停止执行函数和涉及的其他控制器 就我这里的情况而言 我只是打电话test 函数于dashboard控制器 In dashboard构造函数将执行MY Login library In MY Login
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • dart中解析对象(不支持的操作:无法添加到固定长度列表)

    我有一个用户对象 当用户登录 注册时 该对象保存到云 Firestore 数据库中 因此 当用户登录时 将从数据库中检索用户对象 并且一切正常 直到我尝试对列表 usersProject 执行 添加 操作 Add the new proje
  • 是否可以使用 PHP 重定向发送 POST 数据?

    更新 这不是重复的如何使用 PHP 发送 POST 请求 https stackoverflow com questions 5647461 how do i send a post request with php 那里的解决方案对我不起
  • preg_match_all 查询仅显示有问题的外部组

    我无法弄清楚如何只显示 preg 查询的外部组级别 我会给你一个例子 preg match all start end input matches 这个输入start1 start2 2end 1end产生这个输出start1 start2
  • 在 PHP 中使用 phpseclib 时出现 RSA 问题

    我正在尝试在 phpseclib 中使用 RSA 实现 我认为在函数中执行一次代码并重新使用该函数会更容易 当我尝试向代码发送短信时 我收到一条错误消息 提示 解密错误 测试还让我意识到每次代码运行时密文都是不同的 所以我显然在那里做错了什
  • 覆盖控制器 Symfony 3.4/4.0

    我目前正在尝试覆盖 FOSUserBundle 中的控制器 在新的文档中 https symfony com doc 3 4 bundles override html https symfony com doc 3 4 bundles o
  • Woocommerce 结账自定义选择字段

    我有以下功能 将选择列表添加到 woo commerce 结账表单中 woocommerce form field airport pickup array type gt select class gt array airport pic
  • 使用 Ajax.Request 将 JSON 从浏览器传递到 PHP 的最佳方法

    您好 我有一个 JSON 对象 它是一个二维数组 我需要使用 Ajax Request 将其传递给 PHP 我知道的唯一方法 现在我使用js函数手动序列化我的数组 并获取以下格式的数据 s 1 d 3 4等 我的问题是 有没有办法更直接 有
  • php 错误 fopen(): 文件名不能为空

    发送带有附件代码的电子邮件工作正常 最近我们已将文件传输到另一个托管服务器 idk 发生了什么 它显示以下错误 警告 fopen 第 106 行 home hugerecruitmetnt public html validatecva p
  • 一次播种多行 laravel 5

    我目前正在尝试为我的用户表播种 如果我像这样尝试 2 行 就会失败 如果我只使用单个数组而不是 users 数组内的 2 个数组来创建一些假数据 那么效果很好 我做错了什么 正确的方法是什么 class UserTableSeeder ex
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主
  • ini_set 'session.gc_maxlifetime' 为 1 天

    If I do ini set session gc maxlifetime 86400 这是否意味着用户可以将浏览器留在同一页面 非活动状态 最多 1 天 而不必担心会话被垃圾收集并被注销 如果服务器配置不支持此功能会发生什么 它会给我一
  • 如何使用 PHPExcel 库从 Excel 获取日期

    我正在尝试使用 PHPExcel 从 Excel 获取日期 但我没有得到日期 我得到的字符串值不是 1970 以来的秒数 我尝试过的代码是 InvDate trim excel gt getActiveSheet gt getCell B

随机推荐