PHP:Simple DOM Parser如何迭代这个html代码

时间:2018-04-20 06:22:32

标签: php simple-html-dom

<div id="score">
               <div class="name"><span style="width:68%">A</span></div>
                   <span class="roll">1</span>    

                <div class="name"><span style="width:60%">B</span></div>
                   <span class="roll">2</span>       

                 <div class="name"><span style="width:56%">C</span></div>
                   <span class="roll">3</span>          
 </div>

我想迭代 div.name 的每个范围,但我没有进入下一个 span.roll 标记我已经使用了此代码并检查了条件如果A可用则显示1和上述名称相同。

<?php
include("simple_html_dom.php");
$obj = new simple_html_dom();

 foreach ($obj->find('div[id=score]') as $factor)
    {
         $item = $factor->find('div[class=name] span')->plaintext;

          if(trim($item) == 'A')
          { 
             $a = $factor->find('span[class=roll]',0)->plaintext;
          }
          if(trim($item) == 'B')
          { 
            $b = $factor->find('span[class=roll]',1)->plaintext;
          }
          if(trim($item) == 'C')
          { 
             $c = $factor->find('span[class=roll]',2)->plaintext;
          }
           $final_array['overalldata'] = array
           (
            'a'=> $a,
            'b' => $b,
            'c' => $c,

            );
    }
   print_r($final_array);
   die;


?>

任何有任何想法的机构请帮忙解决。感谢

1 个答案:

答案 0 :(得分:0)

作为替代方案,由于您要定位该ID,因此您无需在父元素上使用foreach,只需直接获取即可。

然后对其子项应用foreach,获取名称 roll

以下是这个想法:

$final_array['overalldata'] = null; // initialize
$factor = $obj->find('div[id=score]', 0); // get the parent
foreach ($factor->find('div[class=name]') as $item) { // each item of the parent
    $name = $item->find('span', 0)->innertext; // get the name
    $roll = $item->next_sibling()->innertext; // get the next sibling which is the roll
    $final_array['overalldata'][$name] = $roll; // and assign it (push it inside the array)

}
print_r($final_array);

基本上,要让name只针对每个div内的孩子,然后定位roll(每个div的兄弟姐妹) ,只需使用->next_sibling()方法。

旁注:如果我是你,我会坚持DOM。它已经内置在PHP中,不需要包含任何第三方库。