Обработка нулевых циклов в php - PullRequest
12 голосов
/ 11 августа 2011

Python предлагает структуру for ... else [но не] следующим образом:

for value in i:
    print value
else:
    print 'i is empty'

Какой ближайший аналог этого в PHP?

Редактировать: см. Комментарий @ Evpok ниже- for ... else на самом деле не работает, как утверждают печатные операторы.Моя ошибка - прости!

Ответы [ 6 ]

8 голосов
/ 11 августа 2011

Для учета всех проходимых, в том числе неисчислимых, правильный подход будет:

$iterated = false;
foreach ($traversable as $value) {
    $iterated = true;

    echo $value;
}

if (!$iterated) {
    echo 'traversable is empty';
}

Если вы пишете обобщенный код, это путь. Если вы знаете, что вы получите исчисляемый ход, метод count явно лучше прочитать.

8 голосов
/ 11 августа 2011
if (!empty($array)){
   foreach ($array as $val)
        echo $val;
}
else
    echo "array is empty";
4 голосов
/ 11 августа 2011
if (count($i) > 0) {
   foreach ($i as $x) { ... }
} else {
   echo 'i is empty';
}

при условии, что i является массивом.

3 голосов
/ 11 августа 2011

Точная реализация, как сказано в руководстве по Python, такова:

$count = count($my_array);
$cntr = 0;
foreach($my_array as $my_value)
{
  $cntr++;
  // do the loop work
}
if($cntr == $count)
{
   // all elements treated, do the 'python-else' part.
}
0 голосов
/ 20 июня 2017

К сожалению, в PHP нет такой вещи, как forelse loop, но если вы используете laravel, в их blade templating engine есть forelse loop, который выглядит примерно так

@forelse($arrays as $string)
  <p>{{ $string }}</p>
@empty
  <p>Empty</p>
@endforelse

Дополнительная информация здесь -> https://laravel.com/docs/5.4/blade#loops

, но вы можете обойти это, если вы не используете laravel's blade templating engine, что-то вроде этого было бы отличным подходом

if(count($arrays)) {
  foreach($arrays as $string) {
    echo '<p>'. $string .'</p>';
  }
} else {
  echo '<p>Empty!</p>';
}

, если вы пришлис лучшей идеей, пиши мне, пожалуйста.

0 голосов
/ 18 июля 2012

Я понимаю, что это не отвечает вашему конкретному примеру, но я использовал goto в качестве обходного пути для другой проблемы -> else Python to PHP:

foreach(range(2,100) as $n){
    for($x = 2; $x < $n; $x++){
        if($n % $x==0){
            print $n . ' equals ' . $x . ' * ' . $n/$x . '<br>';
            goto end;   
        }
    }
        echo $n . ' is a prime number.<br>';    
        end:
    }

Возможно, это более практичный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...