0

データベースの値に基づいてグラフを自動的に生成する PHP スクリプトを作成しているときに問題が発生しました。

X 行に 12 か月すべてが表示され、Y 行に各月の月収の合計が表示されます。毎回同じサイズのグラフを維持するために、月収の合計をすべてのグラフの影響率に変換したいので、単純な式を使用します。

(配列要素 / すべての配列要素の合計) * 100

これは、すべてのグラフのどの % 部分が各配列要素であるかを示す必要があります

コードはかなり単純です。

foreach($years as $year) {
// Do something
    foreach($months as $month) {
        foreach( // this foreach is getting monthly income foreach month \\ ) {
            // so in here we get $total_by_date[$year][$month];
        }
        $year_total[$year] += $total_by_date[$year][$month]; //sum of (sum of each month income)
        ?>
        <div style="background:black;height:20px;width:<?php echo ($total_by_date[$year][$month] / $year_total[$year]) * 100 ?>px;">div> //drawing graph based on given values
        <?php
    }
}

いろいろな条件で確認したところ、ちゃんと動いているようで、月ごとの月一覧ができて、月収も月ごとにきちんと表示されました。それでも、本質的には機能していません。完全に機能するためには、グラフを描画する出力を開始する前に、foreach ループの各要素がスキャンされ、合計関数が配列ウォークを実行している間に、毎年の総収入を取得する必要があります。スキャンされた月ごとに合計値が増加し、最終的には 1 月と 2 月の収入が 0 であるため、年収は 6700 である必要があるため、エラーはほとんどありません。

foreach が毎月の出力を開始する前に、年間総収入を取得する必要があると思いますが、問題は、その方法がわからないことです。私が思いついた:

if(empty($year_sub[$year])) { unset($year_sub[$year]); continue; }

div出力の前に配置すると、少し役に立ちました。最初の0をすべて削除したため、最初にクラッシュすることはありませんが、その場で合計を実行しているため、アイデアが台無しになります。

おそらく誰かが、出力の前に合計を開始および終了する方法またはその他の優れたソリューションを知っているでしょう。前もって感謝します。

4

1 に答える 1