【发布时间】:2015-02-20 21:51:14
【问题描述】:
以下情况:
我在数据库中查询条目,出于测试目的限制为 100:
$stmt = $dbh->prepare("SELECT sell FROM products LIMIT 100");
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
然后我进入一个 while 循环,每个函数调用我只能获取(并使用)20 个条目,所以我将 20 个提取到我的$List:
while ($result) {
/...
$List->setSell(array($result[0]['sell'], $result[1]['sell'], $result[2]['sell'], $result[3]['sell'], $result[4]['sell'], $result[5]['sell'], $result[6]['sell'], $result[7]['sell'], $result[8]['sell'], $result[9]['sell'], $result[10]['sell'], $result[11]['sell'], $result[12]['sell'], $result[13]['sell'], $result[14]['sell'], $result[15]['sell'], $result[16]['sell'], $result[17]['sell'], $result[18]['sell'], $result[19]['sell']));
现在调用一个处理结果集的函数,然后我删除 20 个条目并重置数组值:
for ($x= 0;$x<20;$x++) {
unset($result[$x]);
$result = array_values($result);
}
没有 cmets 的 while 循环:
while ($result) {
/...
$List->setSell(array($result[0]['sell'], $result[1]['sell'], $result[2]['sell'], $result[3]['sell'], $result[4]['sell'], $result[5]['sell'], $result[6]['sell'], $result[7]['sell'], $result[8]['sell'], $result[9]['sell'], $result[10]['sell'], $result[11]['sell'], $result[12]['sell'], $result[13]['sell'], $result[14]['sell'], $result[15]['sell'], $result[16]['sell'], $result[17]['sell'], $result[18]['sell'], $result[19]['sell']));
for ($x= 0;$x<20;$x++) {
unset($result[$x]);
$result = array_values($result);
}
echo "<pre>";
var_dump($result);
echo "</pre>";
}
它似乎部分工作,我在上面显示的 while 右括号之前执行 var_dump 时得到以下输出。
array(80) {...}
array(60) {...}
array(40) {...}
array(20) {...}
正如预期的那样,但在二十之后它会去
array(10) {...}
array(5) {...}
array(2) {...}
array(1) {...}
array(0) {...}
所以我不明白为什么我得到那些 10、5、2 和 1 值的数组以及我在这里做错了什么。有人可以帮忙吗?
【问题讨论】:
-
快速扫描...可能是因为
array_values()正在重新编号您的阵列? -
是的,但它应该这样做,因为我选择了数组的前 20 个值并将它们放入函数句柄。你认为这是错误吗? @主教
-
嗯,真的有必要在每个循环中重置
$result = array_values($result);20x 吗?我不是 PHP 方面的专家,但我可能会寻找一种不同的方法来迭代所有$result的值。
标签: php for-loop while-loop