Неопределенная переменная после обновления до PHP 5.4

Я не мог понять, что не так с этим простым кодом:

<?php    
$arr[0]['name'] = 'foo';    
?>

<? foreach ($arr as $v): ?>    
    <?=$v['name']?>    
<? endforeach; ?>

Это возвращает:

Notice: Undefined variable: v

Кто-нибудь знает, что с этим не так?


person IMB    schedule 09.07.2014    source источник


Ответы (4)


Пожалуйста, взгляните на необработанный вывод скрипта (а не на рендеринг браузера). Скорее всего, вы не включили короткие теги, и ваш foreach блок даже не работает.

По теме: теги PHP

person Álvaro González    schedule 09.07.2014

Должно быть:

<?php    
$arr[0]['name'] = 'foo';    
?>

<?php foreach ($arr as $v): ?>    
    <?=$v['name']?>    
<?php endforeach; ?>
person Karma    schedule 09.07.2014
comment
Почему голос против? Я согласен с тем, что ответ заслуживает объяснения, но переход на длинные теги - правильное решение. - person Álvaro González; 09.07.2014
comment
Голосование против «неправильных» ответов. Пожалуйста, будьте внимательны при голосовании против. - person Karma; 09.07.2014
comment
O / P спросил: «Что в этом плохого?» Так что исправил работу кода. - person Karma; 09.07.2014

Вы смотрите на многомерный массив.

Перед индексом имени стоит нулевой индекс. Используйте ключ => значение в foreach.

<?php    
$arr[0]['name'] = 'foo';    
?>

<?php foreach ($arr as $v=>$i): ?>    
    <?php echo $i['name']; ?>    
<?php endforeach; ?>

Вывод:

foo
person sotirojo    schedule 09.07.2014
comment
Это вообще не решает проблему OP. Нет ничего плохого в блоке foreach в вопросе (кроме окружающих его коротких тегов). - person faintsignal; 09.07.2014

Никогда не используйте <?, поскольку он устарел, вы должны хорошо использовать <?php, в случае <?= он будет работать, потому что это короткий метод. поэтому вы должны использовать:

<?php    
$arr[0]['name'] = 'foo';    
?>

<?php foreach ($arr as $v): ?>    
    <?=$v['name']?>    
<?php endforeach; ?>
person Shubanker    schedule 09.07.2014
comment
Кто-нибудь может указать причину голосов против? - person Shubanker; 09.07.2014
comment
Я не голосовал против вас, но, вероятно, потому, что короткие теги на самом деле не устарели? - person IMB; 09.07.2014