2011-08-11 23 views
12

Python oferuje dla ... innego strukturę takiego:Dla ... innych pętli/kontroli przepływu w PHP?

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

Co znajduje się najbliższy odpowiednik tego w PHP?

Edytuj: patrz @ Komentarz Evpoka poniżej - dla for ... else nie działa tak, jak sugerują to instrukcje drukowania. Mój błąd - przepraszam!

+3

Zgodnie z http://docs.python.org/dev/py3k/reference/compound_stmts.html#the-for-statement, klauzula "else" jest wywoływana na końcu pętli, chyba że 'break' komunikat jest osiągnięty nie tylko wtedy, gdy 'i' jest puste. – Evpok

+0

@ Eppok masz rację - mój błąd. Teraz chciałbym poznać pythonowy sposób pisania kodu PHP w poniższych odpowiedziach! –

+1

Nie mogę myśleć o niczym innym niż "jeśli nie ja: ... jeszcze: za ..." – Evpok

Odpowiedz

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

zakładając i jest tablicą.

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

W celu uwzględnienia wszystkich traversables, także niezliczone, prawidłowe podejście byłoby:

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

    echo $value; 
} 

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

Jeśli piszesz kod uogólniony jest to do zrobienia. Jeśli wiesz, że dostaniesz policzalną traversable, metoda count jest oczywiście ładniejsza do odczytania.

3

Robi dokładnie wdrożenia jak mówi instrukcja pyton jest taka:

$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

za dużo pracy. niepotrzebnie .. – totten

+0

@totten Filozofia polega na tym, że lepiej jest jasno mówić o tym, co robisz. Ponieważ staje się on o wiele jaśniejszy dla ludzi, którzy przeczytają twój kod. –

0

Zdaję sobie sprawę, to nie jest odpowiedź na swój konkretny przykład, ale użyłem goto jako obejście dla innego do -> inny Python do problemu 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: 
    } 

Być może jest to bardziej praktyczna odpowiedź.

+0

Czy przerwa nie dokonałaby tego samego? –

0

Niestety nie ma czegoś takiego jak forelse loop w PHP, ale jeśli używasz laravel w ich blade templating engine oni mają forelse loop że coś takiego

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

Więcej informacji tutaj ->https://laravel.com/docs/5.4/blade#loops

ale możesz wykonać pracę, jeśli nie używasz laravel's blade templating engine, coś podobnego byłoby wspaniałe podejście

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

Jeśli wpadłeś na lepszy pomysł, poproś mnie proszę.

Powiązane problemy