目标是使用值在循环中填充数组,以便稍后可以基于键调用它们,而不是在循环中调用循环。该数组实际上包含许多键,除了这个键外,它们似乎都可以工作。
问题在于,值在第一次迭代时重置,然后不会增加,或者无论变量匹配如何都会添加该值。
[$shig query]
$check = array();
$x = 0;
$previd = '';
while ($row = mysql_fetch_array($shig)) {
$sid = $row['sid'];
$num = $row['num'];
if ($num == 0) { $x++; }
$check[$sid] = array('x' => $x);
//This resets $x if $sid is new
if ($sid != $previd) {
//$x = 0;
}
$previd = $sid;
}
print_r($check['3118']); //this should be x = 4
print_r($check['3255']); //this should be x = 2
$num
始终为0或更大的整数。
使用当前循环 ..
会发生什么 $check['3118'][x]
= 4 - 这是正确的
$check['3255'][x]
= 6 - 不正确(x值总和)
如果我取消注释$x = 0;
变量重置....
$check['3118'][x]
= 1 - 不正确(仅查看循环的第一次迭代)
$check['3255'][x]
= 2 - 这是正确的
我似乎无法解决逻辑以使两个print_r()函数都输出正确的值。
如何在主数组键更改时重置$x
变量,以便每个主键包含x
的正确值?
(个人localhost应用程序,所以mysql更新不是必须的,但我知道我应该。)
答案 0 :(得分:1)
我会做的有点不同。不过,我可能会遗漏一些东西。您的问题中的代码看起来似乎如果sid
是连续的并且这不会处理它,但它将获得每个0
的{{1}}值的计数。 / p>
sid
此外,除非您同时从查询中获取其他内容,否则最好只修改查询以在数据库中执行此操作,例如:
while ($row = mysql_fetch_array($shig)) {
$sid = $row['sid'];
if (!isset($check[$sid])) { $check[$sid]['x'] = 0; }
if ($row['num'] == 0) { $check[$sid]['x']++; }
}
答案 1 :(得分:0)
问题中发布的PHP没有任何问题。问题是查询需要正确排序。
向查询本身添加ORDER BY sid ASC
可解决此问题。
这是通过在查询上运行print_r()
并发现它不按顺序排序而发现的。一旦纠正,问题中的PHP工作正常(假设$x=0
未注释)。