遍历PHP数组比遍历MySQLi关联数组更好吗?

时间:2016-10-22 07:36:19

标签: php mysql optimization mysqli query-optimization

我有以下代码,其中我在循环中使用循环来创建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循环相同?哪个更优化?

3 个答案:

答案 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数组或者只是继续执行您现在正在执行的操作,那么您的情况下的外部循环在性能上应该没有太大差异。

你可以在这里做出的巨大性能差异是,如果可以将第二个内部循环查询组合成第一个查询中的某种连接。

在循环内向数据库发送多个查询是需要时间的。