2011-09-26 122 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