html — двумерный массив php с суммами в таблице

я в поиске для общего кода, который использует и массив

$arr[$key1][$key2] = $value;

вывод должен быть таким, где «SUM» не является частью массива.

     | 1st key2 | 2nd key2 | 3rd key2 | SUM
1st key1  |       10 |       10 |       10 |  30
2nd key1  |       10 |       10 |       10 |  30
3rd key1  |       10 |       10 |       10 |  30
SUM       |       30 |       30 |       30 |  90

поэтому я начинаю вывод, чтобы увидеть, как далеко я доберусь:

echo '<table width="100%"><thead>';
foreach($arr as $linekey => $line)
{
echo '<tr>';
echo '<th align="center">';
echo '</th>';
foreach($line as $key => $value)
{
echo '<th align="center">';
echo $key;
echo '</th>';
}
echo '<th align="center">';
echo 'SUM';   //adding the SUM column
echo '</th>';
echo '</tr>';
break;
}
echo '</thead><tbody>';
foreach($arr as $key1 => $value1)
{ echo '<tr>';
echo'<td>'.$key1.'</td>';
$sumRow = 0; //reset sumRow
foreach($arr[$key1] as $key2 => $value2)
{
echo'<td>'.round($arr[$key1][$key2],0).'</td>';
$sumRow += $arr[$key1][$key2]; //summing up rows
$sumAll += $arr[$key1][$key2]; //summing up everything
$sumCol += $arr[$key1][$key2]; //where should be this?
}
echo'<td>'.round($sumRow,0).'</td>'; //echo $sumRow
echo '</tr>';
}
echo '</tbody></table>';

это работает, но я не уверен, где суммировать столбцы

2

Решение

Вы должны использовать массив $sumCol собирать суммы столбцов:

$sumCol[$key2] += $arr[$key1][$key2];

Размер должен быть как количество столбцов.

Вы не можете сделать это в одном цикле без массива, потому что вы перебираете индекс столбцов внутри, так что вы можете собрать только sumRow в одной временной переменной (без массива).

Затем в конце:

echo '<tr><td>SUM</td>';
foreach($sumCol as $key2 => $value2)
{
echo'<td>'.round($sumCol[$key2],0).'</td>'; //echo $sumCol
}
echo '</tr>';
echo '</tbody></table>';

Другой способ — определить второй цикл, в котором вы сначала выполняете итерации по столбцам, а затем — по строкам.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]