gpt4 book ai didi

php - 什么更快?在循环中触发查询或遍历数组?

转载 作者:行者123 更新时间:2023-11-29 02:00:05 25 4
gpt4 key购买 nike

我只是问自己什么更快:我有一个 for 循环,我必须根据我的循环变量检查某个表列。

现在我有两个选择:在循环中,我为每次迭代触发一个查询并检查我的结果。第二个选项是获取我需要的所有行,并在我的 for 循环中运行一个 foreach 循环并检查我想要的字段和我的循环变量之间是否有有效匹配。

这有点难以解释,但我只是让代码说话。我在这里没有在循环中使用真实的代码,而是通过说明的方式使用虚构的函数调用。

选项 1:为每次迭代查询数据库。

<?php

// Option 1:

for($i = 0; $i < 5; $i++)
{
$query_result = query_database_where_field_equals($i);
if($query_result)
{
echo "Here is something";
}
else
{
echo "Here is nothing";
}

}

// Option 2:

$results = query_database_and_get_all_results();

for($i = 0; $i < 5; $i++)
{

foreach($results AS $result)
{
if($result['desired_field'] == $i)
{
echo "Here is something";
}
else
{
echo "Here is nothing";
}
}

}

?>

这两种方法都可以,但我敢肯定,从性能的角度来看,在循环内触发查询是一种更糟糕的做法。

但是在 for 循环中使用 foreach 循环对我来说似乎也有点奇怪。

那么这样做的首选方式是什么?

编辑 - 添加信息

我有一个 for 循环需要运行几次。数量是静态的(例如 5),不依赖于数据库中的任何记录。每次迭代代表一个位置。

我有一个数据库表,可以存储有关职位包含的信息。

例子:

positions (id, position)

因此,示例记录可能是: 位置 (1, 2)

这意味着我在位置 2 上有一些东西。我想在循环中做的基本上是检查我是否获得了该位置的记录。预期输出为:

Here is nothing
Here is nothing
Here is something
Here is nothing
Here is nothing

最佳答案

前面两个答案都是正确的。
@Euantorano:代码迭代优于查询。您将避免较慢的数据库访问,并避免数据库过载。
不过,正如 Slaks 所说,您可以添加 WHERE 条件,这会减少您的数组。提高检查是否存在的循环性能。

最后我建议得到一个 bucle 来索引结果,这样你就可以检查结果是否已设置。

$res = array();
$results = query_database_and_get_all_results();
for($results as $r) {
$res[$result['desired_field']] = $r;
}
for($i = 0; $i < 5; $i++) {
echo (isset($res[i]) ? "Here is something" : "Here is nothing");
}

这段代码根据数组的大小 + 你的第二个 bucle 给你一个恒定的性能。根据您的需要,更好的查询实际上可以带来更好的性能,但这是基于您的具体问题。
希望对您有所帮助!

关于php - 什么更快?在循环中触发查询或遍历数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17195930/

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