如何从foreach循环加粗文本

时间:2015-12-04 20:56:31

标签: php wordpress foreach

我有结果表(网球​​比赛)。目标是大胆赢得比赛。我已经制作了完美的循环,如果匹配有3组,但如果我有2套它不显示结果,它显示(粗体)只有赢家,因为我在表中的那些列(g5,g6)中为空。如何使用两列空列显示这些结果?

This is my code.

<?php
            global $wpdb;
            $result = $wpdb->get_results ("SELECT challenger,challenged, date_match, CONCAT(g1,':',g2,' ',g3,':',g4,' ',g5,':',g6) AS result1,
                                          g1,g2,g3,g4,g5,g6
                                          FROM barbara_results
                                          WHERE date_match
                                          BETWEEN '2015-11-21' AND '2015-12-06'
                                          ORDER BY date_match ASC");

            foreach ( $result as $print )   {
                echo '<td>';
                    if (((int) $print->g1 > ((int) $print->g2)) && ((int) $print->g3 > ((int) $print->g4))|| ((int) $print->g5 > ((int) $print->g6))){
                        echo '<strong>'.$print->challenger.'</strong>';
                    }
                else{
                    echo $print->challenger.'</td>';
                }

                echo '<td>';
                if (((int) $print->g2 > ((int) $print->g1)) && ((int) $print->g4 > ((int) $print->g3))|| ((int) $print->g6 > ((int) $print->g5))){
                    echo '<strong>'.$print->challenged.'</strong>';
                }
                else{
                    echo $print->challenged.'</td>';
                }
                echo '<td>' . date('d.m.Y.', strtotime($print->date_match)).'</td>';
                echo '<td>' . $print->result.'</td>';
                echo '<td>' . $print->result1.'</td>';
                echo '</tr>';
            }
            ?>

2 个答案:

答案 0 :(得分:0)

如果您将单个列g1, g2, ..., g6添加到SELECT语句中,如下例所示,则可以在foreach循环中单独使用(并格式化)这些列结果

// in the query:
$result = $wpdb->get_results ("SELECT g1, g2, g3, g4, g5, g6 ...");

根据您之前的说明,g5g6没有结果。这应该意味着任何时候g5g6都是NOT NULL,我们可以通过简单的if (g5 > g6) ... else ...类型的比较找到胜利者。如果g5g6NULL,则表明上一次g1 > g2中的g3 > g4else比较没有平局结果阻止,这使我们能够在那里找到胜利者。

以下示例显示了使用is_null函数检查值是否为NULL的一种方法。

// in the foreach loop:
foreach ($result as $output) {
  // check if g5 and g6 are NOT NULL
  // this allows us to avoid the g1, g2, g3, g4 else statement below
  if (!is_null($output->g5) && !is_null($output->g6)) {
    if ((int) $output->g5 > (int) $output->g6) {
      echo '<strong>' . $output->challenger . '</strong>';
    } else {
      echo '<strong>' . $output->challenged . '</strong>';
    }
  } else {
    if (((int) $output->g1 > (int) $output->g2) &&
        ((int) $output->g3 > (int) $output->g4)) {
      echo '<strong>' . $output->challenger . '</strong>';
    } else {
      echo '<strong>' . $output->challenged . '</strong>';
    }
  }
}

注意: (int)部分可确保您检查数据库中的整数值 {{1} }列。

答案 1 :(得分:0)

<?php
        global $wpdb;
        $result = $wpdb->get_results ("SELECT challenger,challenged, date_match, CONCAT(g1,':',g2,' ',g3,':',g4,' ',g5,':',g6) AS result1,
                                      g1,g2,g3,g4,g5,g6
                                      FROM barbara_results
                                      WHERE date_match
                                      BETWEEN '2015-11-21' AND '2015-12-06'
                                      ORDER BY date_match ASC");

        foreach ( $result as $print )   {

            $sum1 = (int) $print->g1 + (int) $print->g3 + ( is_numeric($print->g5) ? (int) $print->g5 : 0 );
            $sum2 = (int) $print->g2 + (int) $print->g4 + ( is_numeric($print->g6) ? (int) $print->g6 : 0 );
            $challenger = ($sum1 > $sum2) ? '<strong>'.$print->challenger.'</strong>' : $print->challenger;

            echo '<tr>';
            echo '<td>' . $challenger.'</td>';
            echo '<td>' . $print->challenged.'</td>';
            echo '<td>' . date('d.m.Y.', strtotime($print->date_match)).'</td>';
            echo '<td>' . $print->result.'</td>';
            echo '<td>' . $print->result1.'</td>';
            echo '</tr>';
        }
?>