2017-05-19 4 views
1

Ich möchte den Namen im Array überprüfen und wenn es übereinstimmte eine Nachricht anzeigen. Das Problem ist, dass die Bedingung zur Else-Anweisung geht.PHP bedingte innere Schleife wird nicht arbeiten

<?php 
$names = ['user1','user2','test1','test2']; 
$name = "user1"; 
for($i=0; $i < count($names) ; $i++) { 
    if($name == $names[$i]) { 
     echo "you are registered"; 
    }else { 
     echo "you are unregistered"; 
    } 
} 
?> 
+0

Wenn Sie genau hinsehen es um die IF geht zuerst und dann die sonst – RiggsFolly

+2

Sie eine Schleife durch alle die Elemente, so dass Sie am Ende mit 3 "unregistriert" und einmal mit einem "registriert" enden. –

Antwort

2

So müssen Sie nicht eine Schleife durch alle Array Wenn Sie einen registrierten Benutzer gefunden haben, probieren Sie stattdessen dieses Konstrukt.

$names = ['user1','user2','test1','test2']; 
$name = "user1"; 
for($i=0; $i < count($names) ; $i++) { 
    if($name == $names[$i]) { 
     echo "you are registered"; 
     // found a user, terminate the for loop 
     break; 
    } 
    // if you dont find a registeted user you will do this 
    echo "you are unregistered"; 
} 
+0

Vielen Dank – Lanton

0

Warum nicht in PHP fest eingebauten in in_array statt das Rad neu zu erfinden:

if (in_array($name, $names)) { 
    echo "you are registered"; 
} else { 
    echo "you are unregistered"; 
} 
0

Sie will also nicht aus 3 drucken „Sie sind nicht registrieren“, so die Funktion soll der Schleife nur um herauszufinden, ob der Benutzer registriert ist. Sie können einen boolean auf true gesetzt, wenn Sie den Namen gefunden:

<?php 
$names = ['user1','user2','test1','test2']; 
$name = "user1"; 
$registered = false; 
for($i=0; $i < count($names) ; $i++) { 
    if($name == $names[$i]) { 
     registered = true; 
    } 
} 
if(registered){ 
    echo "you are registered"; 
} else { 
    echo "you are not registered"; 
} 
?> 

Alternativ können Sie in_array() verwenden, die weniger ausführlich und leichter zu verstehen:

$names = ['user1','user2','test1','test2']; 
$name = "user1"; 
if(in_array($name, $names)){ 
    echo "you are registered"; 
} else { 
    echo "you are not registered"; 
} 
0

Hinweis: Sicherheit relevant? Verwenden === zum Vergleichen von Werten

f($name == $names[$i]) { ... 

f($name === $names[$i]) { 

und brechen die Schleife auf dem ersten Spiel, immer, wie bereits erwähnt

Verwandte Themen