2009-11-17 5 views
1

Спасибо за помощь здесь:Основные петли Еогеасп вопрос

foreach loops & stdclass objects

Я создал цикл по каждому элементу, но проблема в том, что иногда результат:

Предупреждение: Недействительный аргумент для Еогеасп() в /дома/MyAccount/public_html/ script.php на линии 81

Я думаю, что, когда нет ничего, чтобы заполнить цикл foreach, но испугался, что это произошло, когда была действительно одна запись.

Мой вопрос: что делает цикл foreach, когда есть только одна запись?

+1

Немного фактического кода может помочь в ответе конкретно. –

+0

Пожалуйста, покажите код (особенно код вокруг соответствующей строки, которая генерирует ваше предупреждение). –

+0

Убедитесь, что вы перешли к массиву. – SIFE

ответ

4

работает только с массивами, поэтому вам необходимо обернуть этот один элемент массива.

Начиная с PHP 5, можно также перебирать объекты. http://php.net/manual/en/control-structures.foreach.php

Чтобы узнать больше о переборе над объектами см: http://www.php.net/manual/en/language.oop5.iterations.php

+0

В php5 объекты могут быть повторены. –

+0

@Tim Lytle: если этот объект является объектом, который должен быть частью массива, который зацикливается, цикл по объекту и по массиву - это две разные вещи. – koen

+0

См. Http://php.net/manual/en/control-structures.foreach.php для получения дополнительной информации. – oremj

2

Как oremj говорит, что вы будете нуждаться в массив. Если у вас иногда есть массив, а иногда только одна вещь, вы можете передать его в массив, чтобы каждый раз работать с массивами. Одной вещью будет массив («одно») после того, как он будет перенесен в массив. Затем вы можете зациклиться на нем, и цикл начнется и завершится «одной вещью».

редактирование: как другие указали, что петля над объектом также возможна.

+0

Как мне передать массив? –

+1

@pg что-то вроде: 'foreach ((array) $ yourArray as $ key => $ val)' – richsage

3

foreach в PHP5 can iterate over an object, или Array.

Я размещаю это, чтобы сбалансировать тех, кто говорит вам, что вы не можете использовать объект.

И как другие ответы охватывают, если ваши данные будут итерированы в foreach, они должны быть обернуты одинаково каждый раз. Всегда массив (даже если это только один элемент) или всегда объект (даже если это только один метод).

1

foreach будет работать отлично на массиве, содержащем только 1 элемент. Попробуйте этот пример:

$foodlist = array("burrito"); 

foreach ($foodlist as $food) { 
    echo $food . "\n"; 
} 
0

Пример:

<?php 

$array = array(1, 2, 3, 4, 5); 
foreach ($array as $value) { 
    echo $value."<br />"; 
} 

?> 
0

Попробуйте это:

// Make sure array is an array 
if (!$array) $array = array(); 
if (!is_array($array)) $array = array($array); 

foreach ($array as $value) { 
    echo $value."<br />"; 
} 
Смежные вопросы