2014-07-26 3 views
-3

Если это когда-либо обсуждалось ранее, простите меня, я новичок.Поведение странного состояния в петле foreach PHP

Итак, у меня возникли проблемы с очень странным поведением условия IF в PHP.

Скажем, у меня есть этот код:

$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>"); 

Так что этот код выше вывод должен только один ряд, но то, что он делает это выводит 2 строки.

Даже если я var_dump значение $ ind it's o.k. (с первой итерацией это (int) 1, second (int) 0). Даже когда я бросил его на bool и попробовал снова var_dump, он по-прежнему o.k. ((bool) true, (bool) false). Но в условиях ЕС это странно, когда каждый раз, когда он, кажется, возвращает true. Любые мнения по этому поводу? Рекомендации?

+0

ли '$ someArray' должен быть' $ userPhotosArray'? Он не используется в этом коде, и он немного запутан. –

+0

Отлично! Теперь посмотрим ... :) –

+0

@Emissary no, тот же снова. var_dump показывает (int) 0, (int) 1. – MichaelOne

ответ

1

Что вы делаете это:

  • печати <table>

Первая итерация:

  • печати <tr>
  • печати <td>, print_r и </td>
  • печати </tr>

Вторая итерация

  • печати <td>, print_r и </td>

Наконец

  • печати </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>"); 
+0

решил эту проблему самостоятельно, но спасибо за уведомление о функции браузера «без постороннего закрытия». Этот код отлично работает - http://ideone.com/4JLF1R – MichaelOne

Смежные вопросы