Вычитание двухмерных элементов массива php из каждого другого и вывод в одну таблицу - PullRequest
0 голосов
/ 01 марта 2020

У меня есть двумерный массив, заполненный 12-месячными названиями и средними температурами за 2 разных года. На данный момент я печатаю их в таблицу html очень хорошо, используя foreach l oop. Однако мне также нужно найти способ рассчитать разницу и распечатать ее в той же таблице рядом с остальными данными, а также распечатать общую разницу. Мне также нужно печатать разницу как красный текст, если разница больше 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>';
?>

и ожидаемый результат это что-то похожее на это

Любой совет будет очень признателен! Спасибо!

Ответы [ 2 ]

0 голосов
/ 01 марта 2020

Вы почти у цели. Вы должны рассчитать разницу между двумя датами и назначить цвета соответственно вашему внутреннему l oop. Условия выглядят следующим образом:

$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>';
0 голосов
/ 01 марта 2020

Используйте array_walk, чтобы добавить временную разницу к каждому подмассиву:

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

Тогда ваша разница в $ month [3]. Я бы удалил внутреннюю l oop и явным образом повторил бы строку за месяц для удобства чтения:

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>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...