Для... else циклов/управления потоком в PHP?
Python предлагает структуру for... else следующим образом:
for value in i:
print value
else:
print 'i is empty'
Какой ближайший эквивалент этому в PHP?
Изменить: см. комментарий @Evpok ниже - for... else на самом деле не работает, как утверждают операторы печати. Моя ошибка - извините!
Ответы
Ответ 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>';
}
если вы придумали лучшую идею, пишите мне, пожалуйста.