2009-03-04 4 views
0

스토어 판매를 보여주는 앱이 있습니다. 이 배열은 다차원 배열이므로 루트 배열의 각 값은 관련된 하루 동안 [sales], [cost], [date] 등을 포함하는 배열입니다. OK, 각 상점에 대해 2 개의 배열이 있습니다. 하나는 확인 된 번호에 대한 것이고 다음은 확인되지 않은 번호에 대한 것입니다. 확인되지 않은 항목은 확인 후 바로 처리되므로 확인되지 않은 항목의 첫 번째 날짜는 확인 된 후 하루가됩니다.PHP에서 다차원 배열을 처리하는 가장 좋은 방법은 무엇입니까?

모두 괜찮습니다.

그러나 모든 매장의 총 판매량을 표시 할 때 합계를 얻으려면 확인 된 모든 숫자와 확인되지 않은 모든 숫자를 결합해야합니다. 여기 까다로운 부분이 있습니다. 확인 된 배열은 확인 된 가장 낮은 상점의 날짜까지만 올라야하며 나머지는 확인되지 않아야합니다. 예 : 주어진 날짜에 모든 상점이 번호를 확인했지만 해당 날짜에 대해 확인되지 않은 상점이 있으면 그 날짜에 대해 확인되지 않아야합니다. 따라서 확인 된 총계 및 확인되지 않은 합계를 작성해야 할 필요가있는 것처럼 각 배열을 점검하고 모두 검증 된 경우 검증 된 배열에 추가하십시오. 그렇지 않은 경우 미확인 된 어레이에 추가하십시오.

나는 이것이 상황을 설명하기 위해 최선을 다하고 있습니다. 나는 작동하는 알고리즘을 가지고 있지만, 너무 복잡해서 그 작업을 할 때마다 영원히 공부해야만합니다. 더 우아한 솔루션이 있기를 바랬습니다.

감사합니다 !!! 여기

이 더미 데이터이지만, 현실에서 더 많은 항목이있을 것입니다

$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 개의 h 열이 있습니다. 두 배열 모두에 날짜가 표시되지 않습니다. 날짜는 확인되지 않은 상태이거나 확인 된 상태 일 것입니다.

그러나 각 저장소에 대해 이러한 배열 집합이 여러 개 있고이를 결합해야 할 경우 서로 다른 저장소의 확인되지 않은 숫자가 서로 다른 날짜에 시작됩니다. storeA는 15 일까지 확인할 수 있으며 storeB는 7 일까지 확인할 수 있습니다. 그래서 각 상점의 모든 것들로부터 새로운 $verified과 새로운 $unverified을 새로 만들어야합니다. 그러나 다른 날짜 범위에 걸쳐 있기 때문에 단순히 모든 검증을 결합 할 수는 없습니다. 따라서 모든 날짜가 확인되면 새 마스터 배열에서 확인 된 상태로 유지되지만 확인되지 않은 경우 새 마스터 확인되지 않은 배열로 이동해야합니다.

죄송합니다.

+0

질문을 더 명확하게 해주는 일부 샘플 또는 의사 코드를 게시하십시오. 그렇게하면 시각화가 더 쉬워집니다. – jonstjohn

+0

동의 함 ... 아마도 배열 구조체의 print_r()일까요? –

+0

결과는 무엇입니까? 총 판매액 또는 합산 된 (계산서 날짜) $ 검증 된 상점과 확인되지 않은 $ 정렬 된 상점이 있습니까? – jfs

답변

2

는 훨씬 더 자주, 전략적 돌파구 데이터 또는 테이블의 표현을 다시 실행에서 올 것이다. 이것은 프로그램의 핵심 부분입니다. 귀하의 플로차트를 으로 보이고 테이블을 숨기십시오. 나는 을 계속 신비화합니다. 테이블을 보여주세요. 보통 flowcharts가 필요하지 않습니다. 그들은 명백 할 것이다.

는 -Frederick P. 브룩스, 주니어, 맨 먼스 미신

난 당신이 모든 상점에 대한 $total_verified$total_unverified 배열을 구축하고자한다고 가정합니다.$earliest_unverified_date에서 가장 빠른 날짜를 추적하는 모든 상점에 대한 $unverified 배열에서

  1. 구축 $total_unverified. 기록 IFF $total_verified에 모든 상점에 대한 각 $verified 배열에서

  2. 추가 값은 날짜를 가지고 있으며 다른 이전의 $earliest_unverified_date$total_unverified 배열에 값을 추가합니다.

1

문제는 관계형 데이터베이스의 종류와 비슷합니다. 데이터베이스를 사용하고 있습니까? 그렇다면 GROUP BY 또는 ROLLUP을 사용하는 적절한 쿼리 (또는 두 개의 쿼리)를 사용하면 수십 줄의 PHP를 절약 할 수 있습니다.

+0

+1 : 데이터가 하나의 데이터베이스에있는 경우 SQL에 대한 작업입니다. – jfs

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 

매번 데이터베이스에서 전체 데이터 세트를 가져올 필요없이 원하는 총 판매액을!

관련 문제