foreach循环PHP中的奇怪条件行为

时间:2014-07-26 18:44:34

标签: php loops foreach conditional-statements

如果以前曾经讨论过,请原谅我,我是新人。

所以我在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的价值也是o.k. (第一次迭代时它是(int)1,第二次(int)0)。即使我把它转换为bool并再次尝试 var_dump ,它仍然是o.k. ((bool)true,(bool)false)。 但是在IF条件下,每当它似乎返回真实时它就会变得怪异。 有什么意见吗?建议?

1 个答案:

答案 0 :(得分:1)

你正在做的是:

  • print <table>

第一次迭代:

  • print <tr>
  • 打印<td>print_r</td>
  • print </tr>

第二次迭代

  • 打印<td>print_r</td>

最后

  • print </table>

所以你的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>");