Esempio di formattazione senza pivot e nel caso in cui tu non abbia dati per una coppia categoria/anno.
Codice PHP:
<?php
$i = array();
$i[] = array('categoria'=>'banane','data'=>'2017','importo'=>50);
$i[] = array('categoria'=>'banane','data'=>'2015','importo'=>100);
$i[] = array('categoria'=>'mele' ,'data'=>'2017','importo'=>30);
$i[] = array('categoria'=>'mele' ,'data'=>'2016','importo'=>20);
$i[] = array('categoria'=>'mele' ,'data'=>'2014','importo'=>120);
$i[] = array('categoria'=>'pere' ,'data'=>'2017','importo'=>20);
$i[] = array('categoria'=>'pere' ,'data'=>'2016','importo'=>45);
$array2 = array();
$array3 = array();
$righe = count($i);
$index = 0;
$min = 9999;
$max = 0;
while ($index < $righe) {
$temp = $i[$index];
//---- anno minimo e anno massimo
if ($temp['data'] < $min) {
$min = $temp['data'];
}
if ($temp['data'] > $max) {
$max = $temp['data'];
}
//---- preparazione per dati mancanti
$array2[$temp['data']][$temp['categoria']] = $temp['importo'];
$array3[] = $temp['categoria'];
$index++;
}
$array3 = array_unique($array3);
sort($array3);
// Creazione della tabella
?>
<table summary="">
<tr>
<td></td><?php
for ($j=$max;$j>=$min;$j--) {?>
<td><?php print $j ?> </td><?php
} ?>
</tr><?php
foreach($array3 as $key => $value) {?>
<tr>
<td><?php print $value ?></td><?php
for ($j=$max;$j>=$min;$j--) {
$text = isset($array2[$j][$value]) ? $array2[$j][$value] : 0;?>
<td><?php print $text ?></td><?php
}?>
</tr><?php
}?>
</table>
Dà.
i2017-01-13-004.JPG