2012-10-03 2 views
0

현재 mssql 서버의 저장 프로 시저에서 정보를 가져 오는 함수가 있습니다.배열에서 일치하는 값의 합계

팀이 동일하면 모든 사용자 대상을 합산하는 루프를 만들려고합니다. 나는 보통 mysql에서 간단한 그룹과 sum으로 이것을 수행 할 것이지만 여기에서 길을 잃는다.

초보자 phper에 대한 도움을 주시면 매우 감사하겠습니다!

function getSalesPersonTargetTracker() 
{ 
$targetTracker = new StdClass(); 
$targetTracker->agents = array(); 

$connection = sqlsrv_connect($server, $connectioninfo); 

$query = "{call salespersontargettracker (?)}"; 
$params = array(
       date_format(new DateTime(), '01/M/Y') 
      ); 

//Run the Query    
$statement = sqlsrv_query($connection, $query, $params); 

if (sqlsrv_fetch($statement) === false) 
    print_r(sqlsrv_errors(), true); 

//Read in the overall numbers 
$targetTracker->target = (float)sqlsrv_get_field($statement, 0); 
$targetTracker->workingDays = (int)sqlsrv_get_field($statement, 1); 
$targetTracker->currentDay = (int)sqlsrv_get_field($statement, 2); 
$targetTracker->dailyTarget = (float)sqlsrv_get_field($statement, 3); 
$targetTracker->pointsShouldBeOn = (float)sqlsrv_get_field($statement, 4); 
$targetTracker->pointsOn = (float)sqlsrv_get_field($statement, 5); 
$targetTracker->pointsDifference = (float)sqlsrv_get_field($statement, 6); 
$targetTracker->moneyShouldBeOn = (float)sqlsrv_get_field($statement, 7); 
$targetTracker->moneyOn = (float)sqlsrv_get_field($statement, 8); 
$targetTracker->moneyDifference = (float)sqlsrv_get_field($statement, 9); 

//Move to the next result 
sqlsrv_next_result($statement); 

//Run through all of the agents and show their details 
while (sqlsrv_fetch($statement)) 
{ 
    $salesPerson = new StdClass(); 
    $salesPerson->team = sqlsrv_get_field($statement, 0); 
    $salesPerson->username = strtolower(sqlsrv_get_field($statement, 1)); 
    $salesPerson->target = (float)sqlsrv_get_field($statement, 2); 
    $salesPerson->workingDays = (int)sqlsrv_get_field($statement, 3); 
    $salesPerson->currentDay = (int)sqlsrv_get_field($statement, 4); 
    $salesPerson->dailyTarget = (float)sqlsrv_get_field($statement, 5); 
    $salesPerson->pointsShouldBeOn = (float)sqlsrv_get_field($statement, 6); 
    $salesPerson->pointsOn = (float)sqlsrv_get_field($statement, 7); 
    $salesPerson->pointsDifference = (float)sqlsrv_get_field($statement, 8); 
    $salesPerson->moneyShouldBeOn = (float)sqlsrv_get_field($statement, 9); 
    $salesPerson->moneyOn = (float)sqlsrv_get_field($statement, 10); 
    $salesPerson->moneyDifference = (float)sqlsrv_get_field($statement, 11); 

    //Add this person to the people list 
    $targetTracker->agents[$salesPerson->moneyOn] = $salesPerson; 
    krsort($targetTracker->agents); 
} 

return $targetTracker; 
} 

$targetTrackerall = getSalesPersonTargetTracker(); 
+0

$ sums [$ salesPerson-> team] + = $ salesPerson-> target; –

+0

가 작동하지 않고 각 에이전트 점수를 반복해서 출력합니다. –

답변

0

두 번째 루프에서이 코드를 끝에 추가 할 수 있습니다.

if (!isset($sums[$salesPerson->team])) { 
    $sums[$salesPerson->team] = 0; 
} 
$sums[$salesPerson->team] += $salesPerson->target; 

팀을 키로하여 해당 팀의 모든 사람이 쓴 목표의 합계를 구성합니다. 루프가 끝나면 $sums 값을 사용할 수 있습니다.

그래도 작동하지 않으면 친절하게도 var_dump($sums) 값을 말해주십시오.

+0

은 함수 외부에 새로운 배열을 만들 수있는 방법입니다 팀이 합산 된 곳은 어디입니까? –

관련 문제