2011-08-11 57 views
12

的Python提供了... ELSE結構是這樣的:For ... else循環/ PHP中的流量控制?

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

什麼是最接近的這個在PHP?

編輯:請參閱下面的@Evpok評論 - for ... else實際上並不像打印語句所示的那樣工作。我的錯誤 - 對不起!

+3

根據http://docs.python.org/dev/py3k/reference/compound_stmts.html#the-for-statement,'else'子句在循環結束時被調用,除非'break'聲明達成,不僅當'我'是空的。 – Evpok

+0

@Evpok你是對的 - 我的錯誤。現在我想知道在下面的答案中編寫PHP代碼的pythonic方法! –

+1

我能想到的只不過是'如果不是我:...其他:...' – Evpok

回答

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

假設i是一個數組。

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

要佔全部traversables,包括那些無數的,正確的做法是:

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

    echo $value; 
} 

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

如果你正在編寫通用代碼,這是要走的路。如果你知道你會得到一個可以遍歷的數字,那麼count方法顯然更好閱讀。

3

做詳細的實施爲蟒蛇手冊上說是這樣的:

$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. 
} 
+1

工作太多了。不必要的.. – totten

+0

@totten這裏的哲學是,最好清楚你在做什麼。因爲閱讀代碼的人會變得更加清楚。 –

0

我知道這不回答你的具體的例子,但我已經使用goto作爲一種解決方法另一個用於 - >其他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: 
    } 

也許這是一個更實際的答案。

+0

不會休息一下完成同樣的事情嗎? –

0

可悲的是有沒有這樣的事情在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>'; 
} 

如果你想出了一個更好的主意,請給我發個禮拜。