【问题标题】:PHP extract html tag value into array from stringPHP从字符串中提取html标签值到数组中
【发布时间】:2018-09-29 14:58:53
【问题描述】:

我正在尝试将每个 html 标记的值从我的字符串中提取到数组中。这是我的 str 值:

str = '<li><a href="/somelink1">name1</a></li><li><a href="/somelink2">name2</a></li><li><a href="/somelink3">name3</a></li>'

我想提取每个名称(name1、name2、name3)并将其放入数组中。所以输出应该是:

output = Array(
           [0] => 'name1',
           [1] => 'name2',
           [2] => 'name3'
         )

我正在寻找一些可能做类似事情的功能,但完全没有运气:/

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    您可以为此使用 html 解析器

    $dom = new DomDocument();
    $dom->loadHTML($str);
    
    $lis = [];
    foreach($dom->getElementsByTagName('li') as $li) {
        $lis[] =  $li->nodeValue;
    }
    
    print_r($lis); // Array ( [0] => name1 [1] => name2 [2] => name3 )
    

    【讨论】:

    • 这就是我想要的!非常感谢,按预期工作。
    【解决方案2】:

    有多种方法可以做到这一点,regex 就是其中之一。你可以这样尝试preg_match_all()

    <?php
    $re = '/<a ?.*?>([^<]+)<\/a>/m';
    $str = '<li><a href="/somelink1">name1</a></li><li><a href="/somelink2">name2</a></li><li><a href="/somelink3">name3</a></li>';
    $result = [];
    preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
    
    // Print the entire match result
    foreach($matches as $match){
        $result[] = $match[1];
    }
    print '<pre>';
    print_r($result);
    

    输出:

    Array ( 
      [0] => name1 
      [1] => name2 
      [2] => name3 
    )
    

    演示: https://3v4l.org/B7k58

    正则表达式https://regex101.com/r/HPDhtA/1

    【讨论】:

    • 谢谢,我之前尝试过使用正则表达式,但我无法得到它,您的解决方案也有效,但我认为@splash58 解决方案更清晰。
    • 好的@Steve 很高兴它以某种方式帮助你。顺便看看stackoverflow.com/help/someone-answers
    【解决方案3】:

    实际上@splash58 的答案是正确的,但他可能会错过实际要求,即只有名称值而不是链接,如果我没记错的话。 所以试试这个

    $dom = new DomDocument();
    $dom->loadHTML($str);
    
    $names = [];
    foreach($dom->getElementsByTagName('a') as $a) {
        $names[] =  $a->nodeValue;
    }
    
    print_r($names);
    

    【讨论】:

    • 嗨,谢谢,我只是在寻找那些链接的名称 ()。
    【解决方案4】:

    您还可以使用 DOMXPath 使用 xpath 表达式,并准确指定要查找的内容:

    //li/a

    例如:

    $str = '<li><a href="/somelink1">name1</a></li><li><a href="/somelink2">name2</a></li><li><a href="/somelink3">name3</a></li>';
    $dom = new DomDocument();
    $dom->loadHTML($str);
    $xpath = new DOMXPath($dom);
    $result = [];
    foreach($xpath->evaluate('//li/a') as $a) {
        $result[] = $a->nodeValue;
    }
    
    print_r($result);
    

    结果

    Array
    (
        [0] => name1
        [1] => name2
        [2] => name3
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 2013-08-09
      相关资源
      最近更新 更多