самый чистый способ пропустить foreach, если массив пуст [дубликат]

115
задан Keyo 10 August 2010 в 06:23
поделиться

6 ответов

Есть миллион способов сделать это.

Первый - в любом случае прогнать массив через foreach, если у вас есть массив.

В других случаях это то, что вам может понадобиться:

foreach ((array) $items as $item) {
    print $item;
}

Примечание: всем, кто жалуется на приведение типов, обратите внимание, что OP запросил самый чистый способ пропустить foreach, если массив равен пустой (выделено мной). Значение true, false, чисел или строк не считается пустым . Кроме того, это будет работать с объектами, реализующими \ Traversable , тогда как is_array не будет работать.

195
ответ дан 24 November 2019 в 02:22
поделиться
$items = array('a','b','c');

if(is_array($items)) {
  foreach($items as $item) {
    print $item;
  }
}
26
ответ дан 24 November 2019 в 02:22
поделиться

Я бы не рекомендовал подавлять вывод предупреждения. Однако я бы рекомендовал использовать is_array вместо ! Empty . Если $ items окажется ненулевым скаляром, то foreach все равно выдаст ошибку, если вы используете ! Empty .

15
ответ дан 24 November 2019 в 02:22
поделиться

Я думаю, что лучший подход здесь - это спланировать свой код так, чтобы $ items всегда был массивом. Самое простое решение - инициализировать его в верхней части кода с помощью $ items = array (). Таким образом, он будет представлять собой пустой массив, даже если вы не присвоите ему никакого значения.

Все остальные решения для меня довольно грязные уловки.

6
ответ дан 24 November 2019 в 02:22
поделиться

У меня есть следующая функция в моей "стандартной библиотеке"

/// 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
3
ответ дан 24 November 2019 в 02:22
поделиться
foreach((array)$items as $item) {}
4
ответ дан 24 November 2019 в 02:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: