Подтвердить что ты не робот

Для... else циклов/управления потоком в PHP?

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

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

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

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

4b9b3361

Ответ 1

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

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

    echo $value;
}

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

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

Ответ 2

if (!empty($array)){
   foreach ($array as $val)
        echo $val;
}
else
    echo "array is empty";

Ответ 3

if (count($i) > 0) {
   foreach ($i as $x) { ... }
} else {
   echo 'i is empty';
}

Предполагая, что i - это массив.

Ответ 4

Выполнение точной реализации, как написано в руководстве 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.
}

Ответ 5

Я понимаю, что это не отвечает вашему конкретному примеру, но я использовал goto как обходной путь для другого для → else Python для Проблема с 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:
    }

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

Ответ 6

К сожалению, в 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 blade templating engine, что-то вроде этого будет отличным подходом

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

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