我有以下代码,其中我在循环中使用循环来创建PHP数组:
<html>
<head>
<title>Input Number Incrementer</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</head>
<body>
<label>
Count all1 Traveller(s)
<input type="text" class="main" value="0" placeholder="" />
</label>
<br/>
<br/>
<label>
Adults
<ul class="button-group button-click">
<li><a href="#" class="small button secondary"><i class="fa fa-plus"><span class="hide">+</span></i></a>
</li>
<input type="text" class="cat_textbox" id="CAT_Custom_410672" name="CAT_Custom_410672" maxlength="4000" value="0" />
<li><a href="#" class="small button secondary"><i class="fa fa-minus"><span class="hide">-</span></i></a>
</li>
</ul>
</label>
<label>
Children
<ul class="button-group button-click">
<li><a href="#" class="small button secondary"><i class="fa fa-plus"><span class="hide">+</span></i></a>
</li>
<input type="text" class="cat_textbox" id="CAT_Custom_410672" name="CAT_Custom_410672" maxlength="4000" value="0" />
<li><a href="#" class="small button secondary"><i class="fa fa-minus"><span class="hide">-</span></i></a>
</li>
</ul>
</label>
<label>
Infants
<ul class="button-group button-click">
<li><a href="#" class="small button secondary"><i class="fa fa-plus"><span class="hide">+</span></i></a>
</li>
<input type="text" class="cat_textbox" id="CAT_Custom_410672" name="CAT_Custom_410672" maxlength="4000" value="0" />
<li><a href="#" class="small button secondary"><i class="fa fa-minus"><span class="hide">-</span></i></a>
</li>
</ul>
</label>
</body>
</html>
这两个数组包含近50k行。并将它们编入索引。
但是,我更关注优化问题。如果我将循环1的所有结果存储到PHP数组中然后遍历它,它会有什么不同吗?或者使用$result= mysqli_query($myqueri1);
while($row = mysqli_fetch_assoc($result))
{
$result1=mysqli_query($myqueri2); //This query utilizes a variable obtained from the outer loop. So this cant be written outside the loop.
while($row = mysqli_fetch_assoc($result))
{
//Operations
}
}
与通过常见的PHP循环相同?哪个更优化?
答案 0 :(得分:1)
与访问数组元素相比,数据库访问速度较慢。但是如果数组来自数据库访问,则应该没有太大区别。
我怀疑你的主张&#34;所以这不能写在循环之外。&#34;例如
for ($i = 0; $i < 3, ++$i) {
mysqli_query("SELECT foo FROM bar WHERE id = $i");
}
可以写成
mysqli_query("SELECT foo FROM bar WHERE id IN (0, 1, 2)");
与所有优化一样:在优化之前,找出瓶颈所在。优化后,确认瓶颈实际上已经消失。
答案 1 :(得分:1)
如果我将循环1的所有结果存储到PHP数组中然后遍历它,
...然后你将迭代两次
Whihc更优化了吗?
运行循环一次比运行循环两次更优化。所以它使你的问题更多的是算术,而不是优化。
但是,我更关注优化问题。
然后你必须在第一个查询中使用 JOIN 并获得所有数据,而不需要嵌套查询。
答案 2 :(得分:0)
如果您使用带有默认标志mysqli_query()
的{{1}},则已将整个结果集从数据库传输到您的应用程序中。请参阅http://php.net/manual/en/mysqli.query.php特别是result_mode标志和mysqli_store_result() vs. mysqli_use_result()以更好地解释标志的作用。
这意味着如果您首先使用php数组填充php数组或者只是继续执行您现在正在执行的操作,那么您的情况下的外部循环在性能上应该没有太大差异。
你可以在这里做出的巨大性能差异是,如果可以将第二个内部循环查询组合成第一个查询中的某种连接。
在循环内向数据库发送多个查询是需要时间的。