【问题标题】:How to parse html to get values in array using php如何使用php解析html以获取数组中的值
【发布时间】:2020-10-10 10:35:00
【问题描述】:

所以我正在尝试使用 JS 解析数据。这是我拥有的 HTML 代码。有超过 10000 条记录需要解析。只是提几个澄清一下:

 $str = '<ul>
       <li>
          <a href="https://www.example.com/profile/shrey">Shrey Chathly</a>
          <p> shrey@yahoo.com</p>
          <p> 9910212121</p>
       </li>
       <li>
          <a href="https://www.example.com/profile/neminath">Neminath</a>
          <p> 9818505051</p>
       </li>
       <li>
          <a href="https://www.example.com/profile/mohan">Mohan</a>
          <p> Mohan@yahoo.co.in</p>
          <p> 9111502287</p>
       </li>
       <li>
          <a href="https://www.example.com/profile/naina">Naina</a>
          <p> naina@gmail.com</p>
          <p> 9818505001</p>
       </li>
       <li>
          <a href="https://www.example.com/profile/mohan">Rakesh</a>
          <p> 9111502222</p>
       </li>
    </ul>';

我尝试过这样做:

$dom = new DOMDocument();
$dom->loadHTML($str);
$a = $dom->getElementsByTagName('a'); //DOMNodeList
$p = $dom->getElementsByTagName('p'); //DOMNodeList

foreach($a as $NodeHeader){
  $aDataTableHeaderHTML[] = trim($NodeHeader->textContent);
}

$i = 0;
$j = 0;
foreach($p as $sNodeDetail) {
  $aDataTableDetailHTML[$j][] = trim($sNodeDetail->textContent);
  $i = $i + 1;
  $j = $i % count($aDataTableHeaderHTML) == 0 ? $j + 1 : $j;      


 }

  //print_r($aDataTableDetailHTML);
  // out put
        Array
        (
            [0] => Array
                (
                    [0] => shrey@yahoo.com
                    [1] => 9910212121
                    [2] => 9818505051
                    [3] => Mohan@yahoo.co.in
                    [4] => 9111502287
                )
            [1] => Array
                (
                    [0] => naina@gmail.com
                    [1] => 9818505001
                    [2] => 9111502222
                )
        )

我想要这样的输出:

Array
    (
        [0] => Array
            (
                [0] => Shrey Chathly
                [1] => shrey@yahoo.com
                [2] => 9910212121
            )
        [1] => Array
            (
                [0] => Neminath
                [1] => 
                [2] => 9818505051
            )
         [2] => Array
            (
                [0] => Mohan
                [1] => mohan@yahoo.co.in
                [2] => 9111502287
            ) 
          [3] => Array
            (
                [0] => Naina
                [1] => naina@gmail.com
                [2] => 9818505001
            ) 
          [4] => Array
            (
                [0] => Rakesh
                [1] => 
                [2] => 9111502222
            )      
    )

我无法找到实现预期输出的方法。 请帮我。非常感谢。

【问题讨论】:

    标签: php html arrays


    【解决方案1】:

    想要的结果:

    Array
    (
        [0] => Array
            (
                [0] => Shrey Chathly
                [1] => shrey@yahoo.com
                [2] => 9910212121
            )
        [1] => Array
            (
                [0] => Neminath
                [1] => 
                [2] => 9818505051
            )
        [2] => Array
            (
                [0] => Mohan
                [1] => Mohan@yahoo.co.in
                [2] => 9111502287
            )
        [3] => Array
            (
                [0] => Naina
                [1] => naina@gmail.com
                [2] => 9818505001
            )
        [4] => Array
            (
                [0] => Rakesh
                [1] => 
                [2] => 9111502222
            )
    )
    

    可以这样实现:

    <?php
    $str = '<ul><li><a href="https://www.example.com/profile/shrey">Shrey Chathly</a><p> shrey@yahoo.com</p><p> 9910212121</p></li><li><a href="https://www.example.com/profile/neminath">Neminath</a><p> 9818505051</p></li><li><a href="https://www.example.com/profile/mohan">Mohan</a><p> Mohan@yahoo.co.in</p><p> 9111502287</p></li><li><a href="https://www.example.com/profile/naina">Naina</a><p> naina@gmail.com</p><p> 9818505001</p></li><li><a href="https://www.example.com/profile/mohan">Rakesh</a><p> 9111502222</p></li></ul>';
        
    $data = null;
    
    $dom = new DOMDocument();
    $dom->loadHTML($str);
    $elements = $dom->getElementsByTagName('li');
    foreach($elements as $key => $element) {
      foreach($element->getElementsByTagName('a') as $valueA) {
        $data[$key][] = trim($valueA->textContent);
      }
      
      $pValues = $element->getElementsByTagName('p');
      if(count($pValues) >= 2) {
          $data[$key][] = trim($pValues[0]->textContent);
          $data[$key][] = trim($pValues[1]->textContent);
      } elseif (count($pValues) == 1) {
          $data[$key][] = null;
          $data[$key][] = trim($pValues[0]->textContent);
      }
    }
    echo '<pre>';
    print_r($data);
    

    Play with it online here: http://sandbox.onlinephpfunctions.com/code/0970593bcc1b319cc7de3386c39c6662aad59bdb:

    【讨论】:

    • caramba,非常感谢。它正在工作。请将答案标记为已解决
    • @Mohan 感谢您的回复。只有提问者(在这种情况下是你)可以接受答案。更多细节可以在这里找到:What should I do when someone answers my question?
    猜你喜欢
    • 2013-04-03
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    相关资源
    最近更新 更多