2012-03-09 16 views
0

私は毎月のゲームでアイテムの流通に関する統計を計算しています。PHPでの厄介な報告

私はこのようなテーブルを持っている:

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++; 

} 
?> 
個人的に

+0

あなたは配列でこれを持っている場合は、過去6ヶ月間に発生した行を識別することができますか?それが最初のステップです。その後、数量を合計して値段を加算し、行数で割ります。 (これを行ってコードをここに貼り付ける - 私たちはあなたにいくつかの指摘を与えるだろう)。 – halfer

+0

これは、少しのロジックが必要です。多次元配列()のデータを再計算するのは簡単だろうと思う。正確にあなたはどこに苦しんでいますか? – FMCorz

+0

こんにちはladiesMan217、私はどのように質問を受け入れることができますか?質問を受け入れるためのボタンが表示されません... – Sunchaser

答えて

0
$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

、私はクラスItemを作成し、各項目をキャストしたいとすべての適切なデータをそれに加え、すべての計算を処理するオブジェクトメソッドを作成します。

次に、収集されたデータに基づいてHTMLでデータテーブルを作成します。

関連する問題