如何使它短PHP?

时间:2018-06-09 13:06:46

标签: php regex loops foreach

我制作了这样的代码以及如何缩短代码?我的意思是我不想一直使用foreach进行正则表达式匹配,谢谢。

<?php
  preg_match_all('#<article [^>]*>(.*?)<\/article>#sim', $content, $article);

  foreach($article[1] as $posts) {
    preg_match_all('#<img class="images" [^>]*>#si', $posts, $matches);
    $img[] = $matches[0];
  }

  $result = array_filter($img);

  foreach($result as $res) {
    preg_match_all('#src="(.*?)" data-highres="(.*?)"#si', $res[0], $out);
    $final[] = array(
      'src' => $proxy.base64_encode($out[1][0]),
      'highres' => $proxy.base64_encode($out[2][0])
    );
?>

1 个答案:

答案 0 :(得分:1)

如果你想要一个健壮的代码(总是有效),请避免使用正则表达式解析html,因为html比你想象的更复杂和不可预测。而是使用可用于这些特定任务的内置工具,即DOMxxx类。

$dom = new DOMDocument;
$state = libxml_use_internal_errors(true);
$dom->loadHTML($content);
libxml_use_internal_errors($state);
$xp = new DOMXPath($dom);

$imgList = $xp->query('//article//img[@src][@data-highres]');

foreach($imgList as $img) {
    $final[] = [
        'src' => $proxy.base64_encode($img->getAttribute('src')),
        'highres' => $proxy.base64_encode($img->getAttribute('data-highres'))
    ];
}