1

I've found weird behaviour in PHPs foreach loop. When I do it like this:

<?php
$arr = array();

foreach ( $arr as $a )
{
    echo 'Hello';
}
?>

Then as I expect, nothing is printed simply because the array is empty, but when I do it like this:

<? $arr = array(); ?>

<? foreach ( $arr as $a ): ?>
    Hello
<? endforeach; ?>

Then the word 'Hello' is printed once... Even though the array is empty. I don't see why this would behave differently. To me this looks like a bug, but I could be missing something...

I'm using PHP 5.4 (Windows).

And in case you're wondering, I'm using the second method in my .phtml files (template files).

1
  • 3
    Do you have PHP short tags enabled? Maybe it's showing "Hello" because the PHP isn't running? Commented May 11, 2012 at 21:10

1 Answer 1

4

I did some tests, and it seems this is happening because short_open_tag is off.

You're seeing "Hello" because the PHP is not being ran.

You need to edit your php.ini and set short_open_tag to 1.

As of PHP 5.4, the <?php echo alias <?= is always available, but the short tag (<?) syntax still needs that option set.

Docs: http://www.php.net/manual/en/ini.core.php#ini.short-open-tag

Sign up to request clarification or add additional context in comments.

4 Comments

That was indeed the problem. I thought because <?= ?> did work, that short tags were enabled. But they weren't and it's working now. I'll accept your answer as soon as SO lets me.
@w00: Yeah in PHP 5.4 <?= is enabled regardless of the short_open_tag option.
I do not think short_open_tag is the problem. Try the following example: $items = ''; foreach((array)$items as $item){ echo $item . ' xxx '; } It prints "xxx" even when the $items variable is empty
@Shouvik: short_open_tag was the solution to this problem. His PHP code wasn't being ran, so the page just output "Hello". The code you posted is completely different. Your code works because (array)$items is the same as doing array($items). You wind up with an array with one element, so the loop runs and prints 'xxx'. Docs: php.net/manual/en/…

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.