Есть миллион способов сделать это.
Первый - в любом случае прогнать массив через foreach, если у вас есть массив.
В других случаях это то, что вам может понадобиться:
foreach ((array) $items as $item) {
print $item;
}
Примечание: всем, кто жалуется на приведение типов, обратите внимание, что OP запросил самый чистый способ пропустить foreach, если массив равен пустой (выделено мной). Значение true, false, чисел или строк не считается пустым .
Кроме того, это будет работать с объектами, реализующими \ Traversable
, тогда как is_array
не будет работать.
$items = array('a','b','c');
if(is_array($items)) {
foreach($items as $item) {
print $item;
}
}
Я бы не рекомендовал подавлять вывод предупреждения. Однако я бы рекомендовал использовать is_array
вместо ! Empty
. Если $ items
окажется ненулевым скаляром, то foreach
все равно выдаст ошибку, если вы используете ! Empty
.
Я думаю, что лучший подход здесь - это спланировать свой код так, чтобы $ items всегда был массивом. Самое простое решение - инициализировать его в верхней части кода с помощью $ items = array (). Таким образом, он будет представлять собой пустой массив, даже если вы не присвоите ему никакого значения.
Все остальные решения для меня довольно грязные уловки.
У меня есть следующая функция в моей "стандартной библиотеке"
/// Convert argument to an array.
function a($a = null) {
if(is_null($a))
return array();
if(is_array($a))
return $a;
if(is_object($a))
return (array) $a;
return $_ = func_get_args();
}
По сути, это ничего не делает с массивами / объектами и не преобразует другие типы в массивы. Это очень удобно использовать с операторами foreach и функциями массива
foreach(a($whatever) as $item)....
$foo = array_map(a($array_or_string)....
etc