2011-09-26 10 views
0

이 내 작업 코드 :병합 배열 수량 PHP

while ($list = mysql_fetch_assoc($result)) { 
$sql2 = "SELECT * FROM stock WHERE gID=".$list['gID']; 
$result2 = mysql_query($sql2, $conn) or trigger_error("SQL", E_USER_ERROR); 
$totalgid = mysql_num_rows($result2); 
$sql3 = "SELECT * FROM stockcount WHERE gID=".$list['gID']." AND date='".$list['date']."' AND affectstock=1"; 
$result3 = mysql_query($sql3, $conn) or trigger_error("SQL", E_USER_ERROR); 
$dategid = mysql_num_rows($result3); 
$calculategid = $totalgid - $dategid; 
    if ($calculategid < 0) { 

    if(isset($arr[$list['date']][$list['gID']])){ 
    //increment 
} else { 
    //set to initial value of 1 
    $arr[$list['date']][$list['gID']]=$calculategid; 
} 

    } 

} 
print_r($arr); 

답변

0

당신이 foreach($someList as $list){ ...do this code... } 같은 것입니다 외부에서 루프를해야합니까? 같은 정확한 키에 값을 설정하려고하면 이전 값을 덮어 쓰게되므로 중복 값이 ​​없어야하기 때문에 묻습니다. 난 당신이 루프에있는 다른 배열에이 배열을 추가하는 게시 된 코드를 기반으로 가정 할 수 있습니다. 이런 경우,이 같은 뭔가 도움이 될 수 있습니다 :

//initialize the output array 
$arr = array(); 
//loop through somelist 
foreach($someList as $list){ 
    //check if the key exists, if so increment. 
    if(isset($arr[$list['date']][$list['gID']])){ 
     //increment 
     $arr[$list['date']][$list['gID']]++; 
    } else { 
     //set to initial value of 1 
     $arr[$list['date']][$list['gID']]=1; 
    } 
} 
print_r($arr); 

을 본질적으로 예치 1.

+0

로 설정되어 있지 않은 경우는 그 다음 while 루프 안에, 증가 그냥 키 isset() 있는지 확인하고 만약 그렇다면 while 루프 내에있는 경우 - – user964778

+0

@ user964778 위에 코드를 추가하면 각 루프에서 $ arr 값을 덮어 쓰게됩니다. 루프 밖에서 $ arr과 비슷한 값을 변수에 저장하거나 쿼리를 변경하여/grouping 및 count (*)에 참여하여 원하는 결과를 얻을 수 있습니다. –

+0

나는 지금 막 그것에 관하여 지금 막 생각한다! 위의 코드를 넣었습니다. Array ([2011-09-26] => Array ([2] => -2) [2011-09-27] => Array ([2] => -5))'를 출력하고 있습니다. 보다 읽기 쉬운 형식으로 가져와야합니다. 건배에 대한 나중에 도움이됩니다. – user964778