хитрый отчет в PHP - PullRequest
       3

хитрый отчет в PHP

0 голосов
/ 09 марта 2012

Я вычисляю статистику по распределению предметов в игре каждый месяц.

У меня есть такая таблица:

Date   itemname  quantity avg. price
Mar-2012 x         10       3.45
Mar-2012 y         12       4.66
Apr-2012 x         23       4.56
Apr-2012 y         9        4.6

Как в PHP я могу построить массив и построитьтаблица, которая показывает следующий отчет за последние 6 месяцев?

    Mar-2012            Apr-2012
quantity avg_price  quantity avg_price

x   10        3.45        23     4.56
y   12        4.66        9      4.6

Я не могу создать такой отчет.любая помощь?

Спасибо


Найденное решение;Я хотел знать, есть ли в PHP простой способ сделать это.Я понял, что должен применить логику.Решение следует (код Kohana 2.x):

Контроллер:

$db = Database::instance();
$months = $db -> query( "select distinct from_unixtime( timestamp, '%m-%Y') month
from stats_items 
where timestamp >= ( unix_timestamp() - ( 6 * 30 * 24 * 3600 ) ) order by timestamp asc" ) -> as_array();               

$res = ORM::factory('stats_item') -> find_all();
foreach ( $res as $r )
{
  $stats[$r->name][date('M-Y', $r -> timestamp)]['total'] = $r -> total;
  $db = Database::instance();
  $months = $db -> query( "select distinct from_unixtime( timestamp, '%m-%Y') month
  from stats_items where timestamp >= ( unix_timestamp() - ( 6 * 30 * 24 * 3600 ) ) order by timestamp asc" ) -> as_array();                

  $res = ORM::factory('stats_item') -> find_all();

  foreach ( $res as $r )
 {
        $stats[$r->name][date('M-Y', $r -> timestamp)]['total'] = $r -> total;
        $stats[$r->name][date('M-Y', $r -> timestamp)]['avg_price'] = $r -> avg_price;
    }

    $view->months = $months;
    $view->stats_items = $stats;stats[$r->name][date('M-Y', $r -> timestamp)]['avg_price'] = $r -> avg_price;
    }

    $view->months = $months;
    $view->stats_items = $stats;

Вид:

<table>
<?php

echo "<tr><td width='20%'></td>";
foreach ( $months as $month )   
echo "<td colspan='2' style='text-align:center' width='20%'>" . $month -> month .    '</td>' ; 
echo '</tr>';

echo '<tr>';
echo '<td>Item</td>';
foreach ( $months as $month )   
    echo "<td>Total</td><td>Avg Price</td>";
echo '</tr>';

$i=0;
foreach ( $stats_items as $key => $value )
{   
$class = ( $i % 2 == 0 ) ? 'alternaterow' : '' ; 
echo "<tr class='$class'>";
echo '<td>'. kohana::lang( $key) . '</td>' ;


foreach ( $value as $key2 => $value2 )  
{   
    echo "<td class='tright'>".$value2['total'].'</td>'; 
    echo "<td class='tright'>".$value2['avg_price'].'</td>'; 
}
echo '</tr>';
$i++;

}
?>

Ответы [ 2 ]

0 голосов
/ 09 марта 2012
$result = preg_match_all('/(.*?)[ ]+(.*?)[ ]+(.*?)[ ]+(.*)/',$subject,PREG_SET_ORDER);
$grouped = array();
foreach($result as $res){
  $grouped[$res[1]][] = arrary($res[2],$res[3],$res[4]);
}
$width = 18;

foreach($grouped as $key => $group){
  $len = strlen($key);
  echo str_repeat(' ',floor(($width- $len)/2)) . $key .  str_repeat(' ',ceil(($width- $len)/2)) ;
}
foreach($grouped as $key => $group){
 echo 'quantity avg_price  ';
}
for($i =0;$i < 100;$i++){
  foreach($grouped as $key => $group){
    echo $group[$i][0] .  $group[$i][1] .  $group[$i][2] ;
  }
}

как-то так (не проверено)

0 голосов
/ 09 марта 2012

Лично я бы создал класс Item и бросил в него каждый элемент и все его соответствующие данные, а затем создал бы методы объекта для обработки всех вычислений.

Затем создайте таблицу данных в формате HTML на основе собранных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...