2011-09-26 171 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); 

本質,只是檢查關鍵isset()如果是這樣,增量,如果沒有設置爲1

+0

葉是一種while循環內,則如果在while循環中 - 已添加 – user964778

+0

@ user964778上方的代碼,則將覆蓋每個循環上的$ arr值。您需要將該值保存到循環外部定義的變量中,類似於使用$ arr所做的操作,或者您可以更改查詢以通過連接/分組和計數(*)來獲取結果。 –

+0

我想我剛剛得到它現在工作!已經把上面的代碼。它現在正在輸出'Array([2011-09-26] => Array([2] => -2)[2011-09-27] => Array([2] => -5)''只需要以更易讀的格式獲取它。歡呼你的幫助。 – user964778