【问题标题】:foreach loop in php 5.3 and 7.2php 5.3 和 7.2 中的 foreach 循环
【发布时间】:2018-07-24 17:12:50
【问题描述】:

我想在 PHP 5.3 中使用这个 foreach 循环,它在 PHP 7.2 中运行良好

$query = sprintf("SELECT a,b FROM table");
$result = $mysqli->query($query);
$data = array();
foreach ($result as $row) {
 $data[] = $row;
}

我阅读了官方文档并了解到 foreach 循环的工作方式不同,但我无法弄清楚。

【问题讨论】:

  • foreach 适用于版本 4 php.net/manual/en/control-structures.foreach.php - 我怀疑这是导致问题的原因。您也没有告诉我们您得到的结果与预期结果相反。
  • 我看不出这两个版本有什么不同。
  • 您也没有对sprintf() 做任何事情。至少,不是在您发布的内容中。 php.net/manual/en/function.sprintf.php - 即来自手册:$num = 5; $location = 'tree'; $format = 'There are %d monkeys in the %s'; echo sprintf($format, $num, $location);.
  • Array ([0] => Array ([setuprate] => 15.180 [Build] => 0.0.I5596) [1] => Array ([setuprate] => 15.490 [Build] => 0.0.I5596 ) [2] => Array ( [setuprate] => 15.530 [Build] => 0.0.I5596 ) ) 这是我在 PHP 7.2 中打印数组时得到的输出。但是我的数组在我在 centos 中使用的 PHP 5.3 中没有显示任何内容。 $result 变量在两种情况下都打印出来是相同的。所以,我认为 foreach 是错误的
  • 哦,等等,是的。

标签: php mysql foreach php-7 php-5.3


【解决方案1】:

您通过迭代结果对象来获取结果:

foreach ($result as $row) {
    $data[] = $row;
}

直到 PHP 5.4 才添加对它的支持。 (See the changelog in the manual) 您需要显式调用 fetch 方法。

while ($row = $result->fetch_assoc()) {
    $data[] = $row;
}

【讨论】:

  • 令人印象深刻,这是一个非常细微的差别。让我 +1
猜你喜欢
  • 1970-01-01
  • 2016-09-26
  • 2012-07-19
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
相关资源
最近更新 更多