【问题标题】:Change table bgcolor if both values are equal如果两个值相等,则更改表 bgcolor
【发布时间】:2018-09-30 21:29:28
【问题描述】:

我一直在做一个网络应用程序,它可以检索我选择的所有乐透彩票组合及其相应的中奖组合。这是它的工作原理/我的分步工作:

  1. 将从数据库中检索获胜组合表
  2. 从中奖组合表中检索 Lotto ID 后,它将使用它作为 ID 来查找我自己挑选的乐透彩票组合

    这是逻辑错误开始的地方
  3. 将第一个检索到的乐透组合与每个获胜组合进行比较。 (第一个选择的组合等于第一个获胜组合1,依此类推..)
if($Picked1 == $Win1 || $Picked1 == $Win2 || $Picked1 == $Win3 || $Picked1 == $Win4 ||$Picked1 == $Win5 || $Picked1 == $Win6){
                    echo "<tr><td>$Win1</td>
                      <td>$Win2</td>
                      <td>$Win3</td>
                      <td>$Win4</td>
                      <td>$Win5</td>
                      <td>$Win6</td>
                      <td bgcolor = '#008000'>$Picked1</td>
                      <td>$Picked2</td>
                      <td>$Picked3</td>
                      <td>$Picked4</td>
                      <td>$Picked5</td>
                      <td>$Picked6</td></tr>";

电流输出(有逻辑错误)

如果所选乐透中的多个组合与乐透中奖组合相匹配,则会将同一行重复到下一个。

例如:如果有 4 个选择的乐透组合匹配中奖组合,那么它将重复 4 次(4 个表格行):

这是我当前输出的图像:

目标输出

如果选择的乐透组合与获胜组合匹配,我想要修复打印行的重复并标记表格单元格。打印一行与其选择的乐透组合,如果与对应的中奖乐透组合匹配,则将单元格的 bgcolor 设为绿色。

问题

如何修复我的算法?还是我的算法从一开始就错了?

这是我的完整代码:https://pastebin.com/4gN9zqZZ

【问题讨论】:

  • 不要在您的代码中发布站外链接。您需要将所有相关代码添加到问题本身(复制/粘贴)。如果该链接更改/被删除,这个问题对未来的访问者将毫无用处。

标签: php algorithm html-table


【解决方案1】:

问题在于,您在每条语句中都重复回显TDs。因此它被复制了。相反,您应该做的是根据 if 语句将其仅包含一次,如下所示:

    echo "<tr><td>$Win1</td>
                  <td>$Win2</td>
                  <td>$Win3</td>
                  <td>$Win4</td>
                  <td>$Win5</td>
                  <td>$Win6</td>";
    if($Picked1 == $Win1 || $Picked1 == $Win2 || $Picked1 == $Win3 || $Picked1 == $Win4 ||$Picked1 == $Win5 || $Picked1 == $Win6){
                  echo "<td bgcolor = '#008000'>$Picked1</td>";
    else{
         echo "<td>$Picked1</td>";
    }
    if($Picked2 == $Win1 || $Picked2 == $Win2 || $Picked2 == $Win3 || $Picked2 == $Win4 ||$Picked2 == $Win5 || $Picked2 == $Win6){
                  echo "<td bgcolor = '#008000'>$Picked2</td>";
    else{
         echo "<td>$Picked2</td>";
    }
    if($Picked3 == $Win1 || $Picked3 == $Win2 || $Picked3 == $Win3 || $Picked3 == $Win4 ||$Picked3 == $Win5 || $Picked3 == $Win6){
                  echo "<td bgcolor = '#008000'>$Picked3</td>";
    else{
         echo "<td>$Picked3</td>";
    }
            //And so on...
             echo "</tr>";

【讨论】:

  • 谢谢,但它只打印与获胜组合匹配的表格单元格,例如:如果两个值与获胜组合匹配,它将只打印表格行中的两个表格单元格,而不打印其他 4 个表格细胞。加上它会打印额外的表格单元格,使其其他行有 7 个表格单元格而不是 6.. 我们如何解决这个问题?
  • 我不确定我是否理解正确。在我上面给出的代码中,如果该值与获胜组合不匹配,则打印普通单元格:echo "$Picked3";。那应该行得通。我错过了什么吗?
  • 大声笑,对不起。我试图复制粘贴您提供的代码,现在它解决了我的所有问题。非常感谢兄弟:D 我只是将每个 else 语句放在每个 if 语句中(就像你在上面提供的那个)。
  • 乐于助人。
【解决方案2】:
  • 如果您执行相同的重复检查,请使用数组存储值并运行循环。

代码:

    <?php

    $winning_combinations = [$Win1,$Win2,$Win3,$Win4,$Win5,$Win6];

    while ($Row2 = mysqli_fetch_array($Picked_Lotto_Query, MYSQLI_ASSOC)){
        $picked_db_values = [];
        $picked_db_values[] = $Row2['First_Combination'];
        $picked_db_values[] = $Row2['Second_Combination'];
        $picked_db_values[] = $Row2['Third_Combination'];
        $picked_db_values[] = $Row2['Fourth_Combination'];
        $picked_db_values[] = $Row2['Fifth_Combination'];
        $picked_db_values[] = $Row2['Sixth_Combination'];    

        foreach($picked_db_values as $each_index => $each_combination){
            echo "<tr>
                    <td>$Win1</td>
                    <td>$Win2</td>
                    <td>$Win3</td>
                    <td>$Win4</td>
                    <td>$Win5</td>
                    <td>$Win6</td>";

                $combination_present = in_array($each_combination,$winning_combinations);//store it instead of checking in every iteration
                foreach($picked_db_values as $comb_index => $print_each_comb){
                    if($combination_present && $each_index === $comb_index){
                        echo "<td class='correct_combination'>";
                    }else{
                        echo "<td>";
                    }                
                    echo $print_each_comb;
                    echo "</td>";
                }
            }

            echo "</tr>";
        }
 }

在您的 style.css 中,只需编写,

.correct_combination{
      background-color:#008000;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    相关资源
    最近更新 更多