Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP通过动态数组循环_Php_Arrays_Database_Loops - Fatal编程技术网

PHP通过动态数组循环

PHP通过动态数组循环,php,arrays,database,loops,Php,Arrays,Database,Loops,我有一个带有php后端的Web应用程序。 在一定的时间间隔内,需要对所有用户运行检查。运行这些检查需要一些时间,更重要的是:它们不应该在不存在的用户上执行。用户从数据库接收,可以通过运行检查中途更改。我目前的解决办法是: 如果要检查每个用户是否仍在数据库中,则需要从数据库中查询他的信息,因此这比检查数组中的每个项(如果不是更多的资源开销)更费劲 但是我会建议把用户分成更小的部分,而不是所有的用户。并逐段核对 >首先,您可能需要考虑修改整个业务逻辑。 不要使用无限循环(while(true))和全

我有一个带有php后端的Web应用程序。 在一定的时间间隔内,需要对所有用户运行检查。运行这些检查需要一些时间,更重要的是:它们不应该在不存在的用户上执行。用户从数据库接收,可以通过运行检查中途更改。我目前的解决办法是:


如果要检查每个用户是否仍在数据库中,则需要从数据库中查询他的信息,因此这比检查数组中的每个项(如果不是更多的资源开销)更费劲


但是我会建议把用户分成更小的部分,而不是所有的用户。并逐段核对

>首先,您可能需要考虑修改整个业务逻辑。

不要使用无限循环(
while(true)
和全局变量(
全局$users

要遍历所有用户,可以逐个使用和检索现有用户。因此,在每次迭代期间,您将只从数据库中获取下一个用户:

function getUsersFromDatabase($db)
{
    $id = 0;

    while (($user = $db->query("SELECT * FROM `users` WHERE `id` > $id LIMIT 1"))) {
        yield $user;
        $id = $user->id;
    }
}

foreach (getUsersFromDatabase($db) as $user) {
    checkUser($user);
}

我不知道您的框架或DB适配器的详细信息,因此代码片段是通用的,应该被视为伪代码。

为什么
而(true)
?@sougatabase该代码是一个粗糙的示例。我只是在测试一些需要重复做的事情。最终,这将被设置为一个执事。@sevacietl我不需要重新考虑我的整个业务逻辑。这个脚本只是我测试了一下。我不明白为什么我不应该使用全局变量。在这个应用程序中,它们对我非常有用。话虽如此,我确实认为你的答案是解决这个问题的方法。我最好一个接一个地遍历数据库,让每个用户都在其中。这样,我甚至不必将所有用户都存储在内存中。问题仍然是,有没有一种方法可以在php中循环使用动态数组?