将 HTML 拆分为数组 (PHP)



我必须从返回HTML的函数接收数据。最好的解决方案是编辑代码以更好地工作,但它是实时代码而不是我的代码。我无法编辑这个。

因此,我可以得到一些指导来帮助实现我需要的东西:

返回的 html:

<a href="/newsitems">News</a>
<a href="/news/roman-catapults/16465">Roman Catapults</a>
<a href="/news/year-3-roman-experience/13835">Year 3 Roman Experience</a>
<a href="/news/year-3-dewa-roman-experience/15746">Year 3 Dewa Roman Experience</a>
<a href="/news/science-week-day-1/15423">Science Week</a><a href="/news/world-book-day/15104">World Book Day</a>
<a href="/news/year-6-trip-to-the-lion-salt-works/15762">Year 6 trip to the Lion Salt Works</a><a href="/news/learning-logs/13839">Learning Logs</a>
<a href="/news/working-together/13838">Working Together</a>
<a href="/news/learning-logs/13837">Learning Logs</a>
<a href="/news/year-2-curriculum-map-for-autumn-2/13377">Year 2 Curriculum Map for Autumn 2</a> 

我知道有这样的方法

  • 正则表达式
  • 爆炸
  • 破灭
然而,我

在这方面的知识并不是最好的,需要一点指导来帮助我学习。

我要实现的目标:

  • 尝试将每行分成一个数组
  • 从链接和链接中获取文本
  • 例如,第一行array => (title => "News", link => "/newsitems")

原因:

我无法编辑返回此HTML的函数,我想比返回的数据更好地显示 HTML。

使用 PHP HTML 解析器将是解决您问题的最强大的解决方案。但是,如果您只想快速一次性将示例 html 分解为数组,则可以在新行上使用explode(),如下所示:

$html = '<a href="/newsitems">News</a>
<a href="/news/roman-catapults/16465">Roman Catapults</a>
<a href="/news/year-3-roman-experience/13835">Year 3 Roman Experience</a>
<a href="/news/year-3-dewa-roman-experience/15746">Year 3 Dewa Roman Experience</a>
<a href="/news/science-week-day-1/15423">Science Week</a><a href="/news/world-book-day/15104">World Book Day</a>
<a href="/news/year-6-trip-to-the-lion-salt-works/15762">Year 6 trip to the Lion Salt Works</a><a href="/news/learning-logs/13839">Learning Logs</a>
<a href="/news/working-together/13838">Working Together</a>
<a href="/news/learning-logs/13837">Learning Logs</a>';
$array = explode("n",$html);
$array = array_map('trim',$array);

如果要进一步解析数组项,以便拆分链接和元素文本,可以执行以下操作:

$final = array();
foreach($array as $v){
    $v = trim($v);
    // capture things in the href attribute and within the tags
    preg_match('/href="([^"]*)">([^<]*)</a>/',$v,$matches);
    $final[] = array(
        'originalelement' => $v,
        'url' => $matches[1],
        'text' => $matches[2]
    );
}

$final现在将拥有您要查找的内容,如下所示:

array(
  array(
    "originalelement" => "<a href="/newsitems">News</a>",
    "url" => "/newsitems",
    "text" => "News"
  ),
  array(
    "originalelement" => "<a href="/news/roman-catapults/16465">Roman Catapults</a>",
    "url" => "/news/roman-catapults/16465",
    "text" => "Roman Catapults"
  )
)

请记住,此解决方案将适用于您在此处列出的 html,但 html 是一个狡猾的野兽,如果<a>元素具有嵌套元素(例如 b 或 span(,则正则表达式不会捕获这些元素。

最新更新