gpt4 book ai didi

php - 多个嵌套循环无法按预期工作

转载 作者:行者123 更新时间:2023-12-03 23:08:08 25 4
gpt4 key购买 nike

以下情况:

我在数据库中查询条目,出于测试目的限制为 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);
}

没有注释的 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) {...}

这和预期的一样,但是在 20 之后它会转到

array(10) {...}
array(5) {...}
array(2) {...}
array(1) {...}
array(0) {...}

所以我不明白为什么我得到那些 10、5、2 和 1 值的数组,以及我在这里做错了什么。有人可以帮忙吗?

最佳答案

您正在删除条目的 for() 循环中修改您的数组。考虑一个简单的 5 元素数组会发生什么:

   0 => 10
1 => 20
2 => 30
3 -> 40
4 -> 50

你的 for/unset 循环启动并执行 unset(0),留给你

1 => 20
...
4 -> 50

然后您调用 array_values(),并将您的 $result 数组替换为新的仅值数组,因此您最终得到

0 => 20
1 => 30
2 => 40
3 => 50

循环继续,现在你执行unset(1),所以你最终得到

0 => 20
2 => 40
3 => 50

array_values() 之后你得到

0 => 20
1 => 40
2 => 50

接下来执行 unset(2),现在数组中没有其他要更改的 - 您正在取消设置键(unset(3) unset(4)) 不存在,剩下的值之后都将具有相同的键。

如果您尝试删除前 20 个条目,则不要在您的循环中执行 array_values() 调用。应该是

for ($x= 0;$x<20;$x++) {
unset($result[$x]);
}
$result = array_values($result);

或者您可以使用 array_splice() 并完全跳过 for/unset 内容。

关于php - 多个嵌套循环无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27608758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com