无法在循环中正确重置PHP数组值

时间:2017-03-24 16:22:21

标签: php arrays while-loop

目标是使用值在循环中填充数组,以便稍后可以基于键调用它们,而不是在循环中调用循环。该数组实际上包含许多键,除了这个键外,它们似乎都可以工作。

问题在于,值在第一次迭代时重置,然后不会增加,或者无论变量匹配如何都会添加该值。

[$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更新不是必须的,但我知道我应该。)

2 个答案:

答案 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未注释)。