2017-09-22 7 views
0

これはhtml dom phpでデータを収集し、テーブル形式のデータをエコーするために使用するコードです。 すべてのデータが完全なテーブル形式で提供されています。しかし、私はすべてのデータのうち5つだけを表示したいと思うtable.at最後に私はコンテンツやデータをエコーするテーブルを使用して私はすべての表示のうち5データをエコーし​​たいが、私はこれをコードする考えが得られていない誰も私にこれをするのを助けることができますか?htmlテーブルからデータをフィルタリングする方法

<?php 
include('simple_html_dom.php'); 

$html   = file_get_html('http://www.discoverhongkong.com/us/see-do/events-festivals/events-calendar/index.jsp'); 
$eventRowData = array(); 

class eventRecord 
{ 
    public $dates; 
    public $eventDescription; 
} 
; 
foreach ($html->find('#event_table tr') as $eventItem) { 
    $eventDateArray = array(); 
    $oneEventData = new eventRecord; 

    foreach ($eventItem->find('.date') as $eventDate) { 
     $oneDateData = array(); 
     $dom   = new domDocument('1.0', 'utf-8'); 
     $dom->loadHTML($eventDate); 

     $dom->preserveWhiteSpace = true; 
     $hTwo     = $dom->getElementsByTagName('div')->item(0); 
     foreach ($hTwo->childNodes as $dateElement) { 
      array_push($oneDateData, $dateElement->nodeValue); 

     } 
     //print_r ($oneDateData); 
     array_push($eventDateArray, $oneDateData); 

    } 

    // 
    $oneEventData->dates = $eventDateArray; 

    $eventData = null; 
    foreach ($eventItem->find('.event_name') as $eventName) { 

     $dom = new domDocument('1.0', 'utf-8'); 

     $dom->loadHTML($eventName); 

     $dom->preserveWhiteSpace = true; 
     $baseLink    = "http://www.discoverhongkong.com"; 

     $img = $dom->getElementsByTagName('a')->item(0); 

     $relativeLink = $img->attributes->getNamedItem("href")->value; 
     $eventLink = $baseLink . $relativeLink; 

     $eventData = '<strong><a href="' . $eventLink . '" title="' . $img->textContent . '">' . $img->textContent . '</a></strong><br />'; 

     $oneEventData->eventDescription = $eventData; 
     //echo $oneEventData->eventDescription; 
    } 

    array_push($eventRowData, $oneEventData); 
} 
$arr = array_values($eventRowData); 
//Print_r ($eventRowData); 
//echo "----------"; 
//echo $arr[0]->eventDescription; 
//echo "----------"; 
echo '</br>'; 




echo '<h2>Events In HongKong</h2>'; 
echo '<table class="table-bordered">'; 
echo '<tr>'; 
echo '<th class="abc">EVENT NAME</th>'; 
echo '<th>START DATE</th>'; 
echo '<th>END DATE</th>'; 
echo '</tr>'; 

foreach ($arr as $xyz) { 
    //print_r ($xyz); 
    echo '<tr>'; 
    echo '<td>'; 
    echo ($xyz->eventDescription); 
    echo '</td>'; 


    //$mydates = array_values($xyz->dates); 
    //print_r ($mydates); 
    foreach ($xyz->dates as $datevalue) { 
     //echo '<tr>'; 
     echo '<td>'; 
     foreach ($datevalue as $datevalueitem) { 
      echo $datevalueitem; 
      echo '/'; 
     } 

     echo '</td>'; 

    } 
    echo '</tr>'; 



} 

echo '</table>'; 
?> 
+1

ループの最初の5つの要素だけが表示されることを意味しますか?整数変数にカウントを保持する。それが5に達すると、ループから抜け出す。 – David

+0

はい同じことをやりたいのですが、ここで新しいコードや例を教えてもらえますか? –

+0

配列内のすべてを処理するforeachの代わりに、配列の0〜4のforループを実行します。 – ADyson

答えて

2

制限するループはどれですか?それがどちらのものであっても、構造は同じになります。

$i = 0; 
foreach ($collection as $item) { 
    $i++; 
    if ($i > 5) { 
     break; 
    } 
    // the rest of your loop code 
} 

ですから、基本的に$iに保存している(または変数を呼び出すために好きな)ループが実行された回数のカウント:このような何か。 5回後に、残っているレコードの数に関係なく、ループを終了するにはbreak;を使用します。

+0

yaその仕事は素晴らしい..... –

関連する問題