2011-10-20 4 views
0

이 작업을 수행하는 데 최악의 시간이 있습니다. 다음 코드에서는 데이터베이스 쿼리에서 데이터를 수집하고 합계를 유지하고 특정 정보를 몇 가지 방법으로 집계하는 다차원 배열 객체를 작성하려고합니다. 문제는 그것이해야하는대로 증가하는 값을 얻는 대신 문제가 할당 된 마지막 값으로 인해 값이 손상된 것 같습니다. 코드는 다음과 같습니다.PHP 배열을 즉시 작성하십시오.

 $REVIEWS  = array(); 
     $USER_REVIEWS = array(); 
     $USER_IMGREVS = array(); 


     pseudo-code: loop here which iterates over the DB results creating 
     $date - which is into this function as its called for each day of month 
     $p1user - which is one of the users (there are 3) 'levels' of users 
     $hr - is the hour which is built from the transaction's timestamp 

     $hr  = date('H', $row['P1TIMESTAMP']); 
     $p1user = $row['P1USER']; 

     $REVIEWS[$date] += 1; 
     $USER_REVIEWS[$date][$p1user][$hr] += 1; 
     $USER_IMGREVS[$date][$p1user][$hr] += $row['F5']; 

     print "PASS1<br/>\n"; 
     print "Value of Total Reviews: [".$REVIEWS[$date]."]<br/>\n"; 
     print "Value of User Reviews: [".$USER_REVIEWS[$date][$p1user][$hr]."]<br/>\n"; 
     print "Value of Reviewed Images: [".$USER_IMGREVS[$date][$p1user][$hr]."]<br/>\n"; 
     print "<br/><br/>\n"; 

따라서 전체 인쇄본을 인쇄 할 때마다 '전체 리뷰'가 1 씩 증가합니다. 여태까지는 그런대로 잘됐다. 다음 두 배열은 할당 된 마지막 값만 인쇄하고 함께 추가되지 않습니다. 왜 안돼? 문자 그대로 하나씩 배열을 만들고 그 배열을 포함하는 배열에 전체적으로 할당함으로써 또 다른 방법을 시도했습니다. 그러나 이것도 작동하지 않습니다. 어떤 통찰력?

+1

배열의 다른 부분이 생성되는 위의 코드를 더 이상 사용할 수 있습니까? – ctcherry

+0

배열의'print_r'을 수행하고 그 구조를 살펴 봅니다. –

+0

더 많은 코드를 제공해 주시겠습니까? 어디 배열을 initilize, 당신은 데이터를 수집하는 루프 ... –

답변

0

난 당신이 당신의 배열을 initilize 방법을 모르는, 어쩌면이 도움이 될 것입니다

print "Value of User Reviews: [".$USER_REVIEWS[$date][$p1user][$hr]."]<br/>\n"; 
print "Value of Reviewed Images: [".$USER_IMGREVS[$date][$p1user][$hr]."]<br/>\n"; 

당신 경우 : 그 값에 대한

// replace this 2 lines: 
$USER_REVIEWS[$date][$p1user][$hr] += 1; 
$USER_IMGREVS[$date][$p1user][$hr] += $row['F5']; 

// with this code: 
if (!isset($USER_REVIEWS[$date])) 
    $USER_REVIEWS[$date] = array(); 
if (!isset($USER_REVIEWS[$date][$p1user])) 
    $USER_REVIEWS[$date][$p1user] = array(); 
if (!isset($USER_REVIEWS[$date][$p1user][$hr])) 
    $USER_REVIEWS[$date][$p1user][$hr] = 0; 
$USER_REVIEWS[$date][$p1user][$hr] += 1; 

if (!isset($USER_IMGREVS[$date])) 
    $USER_IMGREVS[$date] = array(); 
if (!isset($USER_IMGREVS[$date][$p1user])) 
    $USER_IMGREVS[$date][$p1user] = array(); 
if (!isset($USER_IMGREVS[$date][$p1user][$hr])) 
    $USER_IMGREVS[$date][$p1user][$hr] = 0; 
$USER_IMGREVS[$date][$p1user][$hr] += $row['F5']; 
+1

MAGNIFICENT! 분명히 새로운 참조가 배열을위한 것이라고 PHP에 알려주지 않고서도 배열을 즉석에서 생성 할 수는 없습니다. 나는 이것이 필요하지 않은 perl에 익숙하다. 고맙습니다. –

0

선생님, 당신의 남녀 공학이 작동하지 않는 이유를 잘 이해 해달라고,하지만 내 첫 번째 테스트에서, 나는이 줄을 바꿀 것 :이 코드는 어쨌든 당신을 도움이된다면

$count = 1; 
$USER_REVIEWS[$count][$p1user][$hr] += 1; 
$USER_IMGREVS[$count][$p1user][$hr] += $row['F5']; 
$count++; 

가 확인하시기 바랍니다.

0

귀하의 인쇄 문에 $ p1user의 값에 의존 모든 사용자를 위해 그것을 인쇄하고 싶다면 $ p1user를 사용하는 것보다 가능한 모든 사용자를 반복해야합니다. 둘 중 하나를 원하면 합계하십시오.

편집 : 나를 괴롭히는 것이 당신의 데이터 구조였습니다. 그것은 당신의 데이터를 잘 표현하지 못하는 것 같습니다. 루프에서 왜 리뷰 배열의 기초에 저장하는 유용한 정보를 구축하지 않습니까?

관련 문제