如何嵌套两个 foreach 以获得正确的值输出


How Can I nest two foreach to get right values output?

我有两个foreach块可以从网页中获取一些值(我正在从HTML表中抓取值)。

<?php
include('../simple_html_dom.php');
$html = file_get_html('http://www.betexplorer.com/soccer/belgium/jupiler-league/results/');
foreach($html->find('td') as $e) {
    echo $e->innertext . '<br>';
}   
foreach( $html->find('td[data-odd]') as $td ) {
    echo $td->attr['data-odd'].PHP_EOL;
}
?>

这是我的 HTML 代码:

<tr class="strong">
    <td class="first-cell tl">
        <a href="../matchdetails.php?matchid=z7jbSp5K" onclick="win(this.href, 560, 500, 0, 1); return false;">Waasland-Beveren - Anderlecht</a>
    </td>
    <td class="result">
        <a href="../matchdetails.php?matchid=z7jbSp5K" onclick="win(this.href, 560, 500, 0, 1); return false;">1:0</a>
    </td>
    <td class="odds best-betrate" data-odd="5.97"></td>
    <td class="odds" data-odd="4.21"></td>
    <td class="odds" data-odd="1.51"></td>
    <td class="last-cell nobr date">21.02.2016</td>
</tr>
<tr class="">
    <td class="first-cell tl">
        <a href="../matchdetails.php?matchid=x0YB63r1" onclick="win(this.href, 560, 500, 0, 1); return false;">Waregem - KV Mechelen</a>
    </td>
    <td class="result">
        <a href="../matchdetails.php?matchid=x0YB63r1" onclick="win(this.href, 560, 500, 0, 1); return false;">2:3</a>
    </td>
    <td class="odds" data-odd="1.83"></td><td class="odds" data-odd="3.71"></td>
    <td class="odds best-betrate" data-odd="3.99"></td>
    <td class="last-cell nobr date">21.02.2016</td>
</tr>

这样,在我的输出中,我从第一个 foreach 获得之前的值,然后从第二个 foreach 获得值。我想以正确的顺序将值放在一起。例如:

21.02.2016 Waasland-Beveren - Anderlecht 1:0 5.96 4.20 1.51   
21.02.2016 Waregem - KV Mechelen 2:3 1.83 3.71 3.98

如果它们具有确切的(计数)或(长度)。在将它们分配给两个变量后,使用普通for

$td = $html->find('td');
$attr = $html->find('td[data-odd]');
for($i=0; $i < count($td); $i++) 
     echo $td[$i]->innertext."<br/>".$attr[$i]->attr['data-odd'].PHP_EOL;
<小时 />

更新:

您希望对从HTML文件中收到的tds重新排序,这意味着您必须考虑如何检索它们的另一个逻辑。此更新的代码非常特定于您的情况:

$match_dates = $html->find("td[class=last-cell nobr date]"); // we have 1 per match
$titles = $html->find("td[class=first-cell tl]"); // 1 per match
$results = $html->find("td[class=result]"); // 1
$best_bets = $html->find("td[class=odds best-betrate]"); // 1
$odds = $html->find("td[class=odds]"); // 2
// Now to output everything in whatever order you want:
$c=0; $b=0; // two counters
foreach($titles as $match)
    echo $match_dates[$c]->innertext." - ".$match->innertext." [".$results[$c]->innertext."] - Best bet rate: ".$best_bets[$c++]->attr['data-odd']." - odds: ".$odds[$b++]->attr['data-odd'].", ".$odds[$b++]->attr['data-odd']."<br/>";