【问题标题】:Subtracting two-dimensional php array elements from eachother and outputting to the same table将二维php数组元素相减并输出到同一张表
【发布时间】:2020-03-01 02:02:40
【问题描述】:

我有一个二维数组,其中包含 2 个不同年份的 12 个月名称和平均温度。截至目前,我让他们在使用 foreach 循环时打印到一个 html 表中。但是,我还需要找到一种方法来计算差异并将其打印到其余数据旁边的同一张表中,以及完全打印总差异。如果差异高于 2,我还需要将差异打印为红色文本,如果差异低于 -2,则打印为绿色。否则颜色不会改变。因为这几乎是我第一次在一定程度上使用 php,所以我完全不知道如何实现它。

这是我目前的代码,成功打印到一个 html 表格中:

<?php
        $months = array
          (
          array("Jan",33.6,32.6),
          array("Feb",35.6,42.9),
          array("Mar",43.1,40.3),
          array("Apr",53.2,51.4),
          array("May",62.7,68.1),
          array("Jun",76.3,72.5),
          array("Jul",76.3,77.1),
          array("Aug",74.6,78.6),
          array("Sep",68,73.2),
          array("Oct",57,60.1),
          array("Nov",46.7,45.3),
          array("Dec",37.7,41.0)
          );
          
        //print array into an html table
        
        echo '<table>';
        echo '<tr><th>Month</th><th>1950 - 2018</th><th>2018</th><th>Difference</th></tr>';
        foreach ($months as $month) {
            
            echo '<tr>';
            
            foreach ($month as $avg) {
                    echo '<td>' . $avg . '</td>';
            }
            echo '</tr>';
        }
        echo '</table>';
?>

和预期的结果是什么 similar to this

任何建议将不胜感激!谢谢!

【问题讨论】:

    标签: php html multidimensional-array


    【解决方案1】:

    你快到了。您必须计算 2 个日期之间的差异并在您的内部循环下方相应地分配颜色。条件如下:

    $diff = $month[2] - $month[1];
    $total += $diff;
    
    
    if($diff < -2.0){
        echo '<td style="color:green">' . $diff . '</td>';
    }else if($diff > 2.0){
        echo '<td style="color:red">' . $diff . '</td>';
    }else{
        echo '<td>' . $diff . '</td>';
    }
    

    完整代码:

    <?php
    
    $months = array
      (
      array("Jan",33.6,32.6),
      array("Feb",35.6,42.9),
      array("Mar",43.1,40.3),
      array("Apr",53.2,51.4),
      array("May",62.7,68.1),
      array("Jun",76.3,72.5),
      array("Jul",76.3,77.1),
      array("Aug",74.6,78.6),
      array("Sep",68,73.2),
      array("Oct",57,60.1),
      array("Nov",46.7,45.3),
      array("Dec",37.7,41.0)
      );
    
    echo '<table border = "1">';
    echo '<tr><th>Month</th><th>1950 - 2018</th><th>2018</th><th>Difference</th></tr>';
    $total = 0;
    
    foreach ($months as $month) {
        echo '<tr>';
    
        foreach ($month as $avg) {
            echo '<td>' . $avg . '</td>';
        }
    
        $diff = $month[2] - $month[1];
        $total += $diff;
    
    
        if($diff < -2.0){
            echo '<td style="color:green">' . $diff . '</td>';
        }else if($diff > 2.0){
            echo '<td style="color:red">' . $diff . '</td>';
        }else{
            echo '<td>' . $diff . '</td>';
        }
    
        echo '</tr>';
    }
    
    echo "<tr><td colspan='4'>Total difference : $total</td></tr>";
    echo '</table>';
    

    【讨论】:

    • 哦,效果很好!非常感谢,这实际上帮助我了解更多!
    • @Kaijudile 很高兴我能帮上忙 :)
    【解决方案2】:

    使用array_walk 将临时差异添加到每个子数组:

    array_walk($months, function(&$month){
        $month[3] = $month[2] - $month[1]; 
    });
    

    那么 $month[3] 将是您的不同之处。 为了便于阅读,我将删除内部循环并每月显式回显该行:

    foreach ($months as $month) {
        echo '<tr>';
        echo '<td>' . $month[0] . '</td>';
        echo '<td>' . $month[1] . '</td>';
        echo '<td>' . $month[2] . '</td>';
        echo '<td';
    
        if ($month[3] > 2) {
            echo ' style="color: red;"';
        }
        elseif ($month[3] < -2) {
            echo ' style="color: green;"';
        }
    
        echo '>' . $month[3] . '</td>';
        echo '</tr>';
    }
    

    【讨论】:

    • 我有点搞砸了,它们仍然完美地打印到桌子上,但 array_walk 似乎根本没有初始化 $month[3]。我能做些什么来使它正常工作吗?
    • 对不起,我的错。我省略了一个 & 符号,通过引用将月份元素传递给匿名函数。
    猜你喜欢
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2017-04-25
    • 1970-01-01
    • 2011-01-28
    • 2018-09-20
    相关资源
    最近更新 更多