【问题标题】:Strange condition behaviour in foreach loop PHPforeach循环PHP中的奇怪条件行为
【发布时间】:2014-07-26 18:44:34
【问题描述】:

如果以前有人讨论过这个问题,请原谅我是新手。

所以我在 PHP 中遇到了非常奇怪的 IF 条件行为问题。

假设,我有这个代码:

$userPhotosArray = ([0] => Array(<more values>),
[1] => Array(<more values>));

print("<table>");

foreach ($userPhotosArray as $index => $photoInfo) {
   $ind = $index % 3;

   if ($ind == 0)
      print("<tr>");

   print("<td>");
   print_r($photoInfo);
   print("</td>");

   if ($ind == 0)
      print("</tr>");
}

print("</table>");

所以上面的代码应该只输出 1 行,但它的作用是输出 2 行。

即使我 var_dump $ind 的值也没关系。 (第一次迭代是(int)1,第二次(int)0)。即使我将它转换为 bool 并再次尝试 var_dump,它仍然可以。 ((布尔)真,(布尔)假)。 但是在 IF 条件下,它的行为很奇怪,每次它似乎都返回 true。 对此有何看法?推荐?

【问题讨论】:

  • $someArray 应该是$userPhotosArray 吗?这段代码中没有用到,有点混乱。
  • 太棒了!现在让我们看看... :)
  • @Emissary 不,同样如此。 var_dump 显示 (int)0, (int)1。
  • 我觉得不错:ideone.com/uWYwCl

标签: php loops foreach conditional-statements


【解决方案1】:

你正在做的是:

  • 打印&lt;table&gt;

第一次迭代:

  • 打印&lt;tr&gt;
  • 打印&lt;td&gt;print_r&lt;/td&gt;
  • 打印&lt;/tr&gt;

第二次迭代

  • 打印&lt;td&gt;print_r&lt;/td&gt;

终于

  • 打印&lt;/table&gt;

所以你的 HTML 看起来像

<table>
   <tr><td> -- print_r -- </td></tr>
   <td> -- print_r -- </td>
</table>

您的浏览器正在充分利用它。

下一个代码应该可以工作

print("<table>");
print("<tr>");

foreach ($userPhotosArray as $index => $photoInfo) {
   $ind = $index % 3;

   if ($index > 0 && $ind == 0)
      print("</tr><tr>");

   print("<td>");
   print_r($photoInfo);
   print("</td>");
}

print("</tr>");
print("</table>");

【讨论】:

  • 我自己解决了这个问题,但感谢您对浏览器“unaided-close-tag”功能的通知。此代码工作正常 - ideone.com/4JLF1R
猜你喜欢
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 2012-07-11
  • 2020-07-12
  • 1970-01-01
相关资源
最近更新 更多