1
  <td class="cinetime">
    <div>Screen: 3</div>
    <br clear="all">
    <span>1:00</span>
    <span>11:00</span>
    <span>13:00</span>
    <span>15:00</span>
    <br clear="all">
    <div>Screen: 4</div>
    <br clear="all">
    <span>12:05</span>
    <span>14:05</span>
    <span>16:05</span>
    <span>18:05</span>
    <span>20:05</span>
    <div>Screen: 3 (3D)</div>
  </td>

上記は私が使用しているHTMLです。

画面3画面4<span>のデータを別々に取り込みたい。

これは以下の私のコードですが、すべて<span>

foreach($cinema->find("td.cinetime span") as $times) {
    echo $times->plaintext;
}
4

2 に答える 2

0

td.cintime内のすべての要素を調べて、テキストが必要かどうかを確認し(画面:3など)、他の要素がスパンであるかどうかを確認してから、別のdivを取得するまで配列に配置する必要があります。これは、1つの画面ブロックが終了したことを意味します。必要なものがすべて揃うまで繰り返します。

擬似コード:

$screensData = array();
$start = false;
foreach($cinema->find("td.cintime *") as $times) {
   if($times->tag == 'div') {
      $start = false;
      if($times->plaintext == 'Screen: 3') {
         $screensData[3] = array();
         $start = 3;
      }
   }

   if($start && $times->tag == 'span') {
      $screensData[$start][] = $times->plaintext;
   }
}
于 2012-10-26T12:14:48.740 に答える
0

このようなもの:

$dom = new simple_html_dom();
$dom->load($source);


$cinetime = $dom->find('.cinetime',0);

$screens = array();
$screenName = '';

foreach($cinetime->children() as $elem){
    if($elem->tag == 'div'){
        $screenName = $elem->innertext;
    } else
    if($elem->tag == 'span'){
        $screens[$screenName][] = $elem->innertext;
    }
}
print_r($screens);

それはこれを生み出します:

Array
(
[Screen: 3] => Array
    (
        [0] => 1:00
        [1] => 11:00
        [2] => 13:00
        [3] => 15:00
    )

[Screen: 4] => Array
    (
        [0] => 12:05
        [1] => 14:05
        [2] => 16:05
        [3] => 18:05
        [4] => 20:05
    )

)

于 2012-10-26T14:43:21.933 に答える