0

店舗の売り上げを表示するアプリがあります。これは多次元配列であるため、ルート配列の各値は、関連する特定の日の、、、などを[sales]含む[cost]配列です。[date]OK、各ストアに2つのアレイがあります。1つは確認済みの番号用で、次は未確認の番号用です。未確認は確認後すぐにピックアップされるため、未確認の最初の日付は確認後1日となります。

OK、これまでのところすべて問題ありません。

しかし、すべての店舗の総売上高を表示するときは、すべての検証済みの数値とすべての未検証の数値を組み合わせて合計を取得する必要があります。ここに注意が必要な部分があります。検証済みのアレイは、検証済みの最下位のストアの日付までのみ実行する必要があり、残りはすべて未検証にする必要があります。例:特定の日付で、すべての店舗が番号を確認したが、その日付で1つが未確認の場合、その日付ですべての店舗を未確認にする必要があります。したがって、検証済みの合計と未検証の合計を作成する必要があるようです。各アレイをチェックし、それらがすべて検証済みかどうかを検証済みアレイに追加します。検証されていない場合は、未検証のアレイに追加します。

それ以来、私は状況を説明するために最善を尽くしています。私は機能しているアルゴリズムを持っていますが、それは非常に複雑なので、作業するたびに永遠にそれを研究する必要があり、よりエレガントな解決策があることを望んでいました。

ありがとう!!!

配列構造は次のようになります

$verified ( 
    [0](sales => 355, cost=> 233, date=> 2008-03-01)
    [0](sales => 235, cost=> 133, date=> 2008-03-02)
    [0](sales => 435, cost=> 143, date=> 2008-03-02)
)
$unverified ( 
        [0](sales => 232, cost=> 133, date=> 2008-03-03)
        [0](sales => 335, cost=> 233, date=> 2008-03-04)
        [0](sales => 535, cost=> 243, date=> 2008-03-05)
    )

これはダミーデータですが、実際にはさらに多くのエントリがあります。各ストアにこれらの2つのアレイがあります。日付は両方のアレイに表示されません。日付は未確認または確認済みのみになります。

ただし、ストアごとにこれらの配列のセットがいくつかあり、それらを組み合わせる必要がある場合、異なるストアの未確認の番号は異なる日付で始まります。storeAは15日まで、storeBは7日まで検証できます。ですから、各店舗のすべてのものから$verified新しいものを構築する必要があります。$unverifiedしかし、検証されたものはさまざまな日付範囲にまたがっているため、単純にすべてを組み合わせることができません。したがって、すべての日付が検証された場合、それらは新しいマスターアレイで検証されたままになりますが、未検証の日付がある場合は、新しいマスターの未検証アレイに移動する必要があります。

申し訳ありませんが、これでうまくいかない場合。

4

3 に答える 3

2

多くの場合、戦略的なブレークスルーは、データまたはテーブルの表現をやり直すことから得られます。ここにプログラムの核心があります。あなたのフローチャートを見せて、テーブルを隠してください。そうすれば、私は当惑し続けるでしょう。あなたのテーブルを見せてください。通常、あなたのフローチャートは必要ありません。それらは明らかです。

—フレデリック・P・ブルックス・ジュニア、The Mythical Man-Month

すべての店舗の配列を構築$total_verifiedしたいと思います。$total_unverified

  1. で最も早い日付を追跡しているすべての店舗の配列$total_unverifiedから構築します。$unverified$earliest_unverified_date

  2. $verifiedすべての店舗の各配列から値を追加し$total_verifiedて、レコードに日付があり、配列$earliest_unverified_dateに値を追加するよりも早いかどうかを確認します$total_unverified

于 2009-03-04T22:14:32.760 に答える
1

あなたの問題は、リレーショナルデータベースが作られたようなもののように聞こえます。データベースを使用していますか?もしそうなら、適切なクエリ(または2つのクエリ)を使用するGROUP BYROLLUP、PHPの数十億行を節約できます。

于 2009-03-04T23:42:03.563 に答える
1

これらすべての数値をデータベースから取得していると思います(そうでない場合は、なぜですか?)。データベースは次のようになります。

TABLE SalesSummary

Id   StoreId  Date        SalesTotal  CostTotal  Verified
...
231  1        2008-03-01  355.00      233.00     true
232  2        2008-03-01  299.00      233.00     true
233  1        2008-03-02  235.00      133.00     false
234  2        2008-03-02  335.00      133.00     true
235  1        2008-03-03  435.00      143.00     false
236  2        2008-03-03  319.00      143.00     false

それから

SELECT MIN(Date) AS FirstUnverifiedDate FROM SalesSummary WHERE Verified=false

最初の未確認の日付を見つけ、

SELECT
  (Date < $FirstUnverifiedDate) AS Verified,
  StoreId,
  SUM(SalesTotal) AS SalesSum,
  SUM(CostTotal) AS CostSum
FROM
  SalesSummary
WHERE
  Date >= $BeginningOfMonth
GROUP BY
  (Date < $FirstUnverifiedDate) DESC,
  StoreId ASC

毎回データベースから完全なデータセットを取得することなく、必要な売上合計を取得できます。

于 2009-03-05T01:17:17.890 に答える