将二维php数组元素彼此相减并输出到同一个表



我有一个二维数组,里面填充了12个月的名称和2个不同年份的平均温度。到目前为止,在使用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>';
?>

预期的结果类似于这个

任何建议都将不胜感激!非常感谢。

您就快到了。你必须计算两个日期之间的差异,并在你的内环下方相应地指定颜色。条件如下:

$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>';

使用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>';
}

最新更新