2016-03-28 10 views
0

Ich versuche, Zufallszahlen mit der Funktion rand() zu erzeugen, und stelle sicher, dass sie nicht im excArray sind.0 im leeren Array gefunden

Wenn ich print_r(array_values($excArray)) tun gibt es Array ([0] =>) was bedeutet es leer ist (oder?)

Aber wenn ich in_array($randInt, $excArray) tun ($ randInt = 0) oder einfach echo in_array(0, $excArray); es gibt 1

Hier ist mein Code :

function generateCode($char, $int, $prefix, $len, $lenMin, $lenMax, $exclude, $array){ 
    do{ 
     $code = ""; 
     $i = 0; 
     $excArray = explode(",", $exclude); 
     echo in_array(0, $excArray); 
     exit(); 
     while($i++ < $int){ 
      do { 
       $randInt = rand(0,1); 
        echo $randInt; 
      }while(in_array($randInt, $excArray)); 
      $code .= $randInt; 
     } 

Warum also echo in_array(0, $excArray); echo 1?

Danke!

+0

Nein, Array (0 =>) bedeutet, dass Sie einen Wert mit einem Index von 0 haben, der leer ist. Aber es wird wahr werden, weil es existiert. – VikingBlooded

+1

Warum haben Sie so viele Parameter auf Ihrer Funktion, wenn Sie sie nicht verwenden? Von dem, was ich sehen kann, generierst du nur Zufallszahlen zwischen 0 und 1. Dein Code scheint zu komplex für solch eine einfache Aufgabe. –

+0

@PedroLobito Ich benutze sie. Ich habe nur den Code gepostet, mit dem ich ein Problem hatte. Der Code wird verwendet, um lange unique-Codes zu generieren. –

Antwort

3

Array ([0] =>) bedeutet, dass es ein Element, das als eine leere Zeichenfolge druckt, wahrscheinlich null oder false oder ... eine leere Zeichenfolge. Verwenden Sie var_dump anstelle von print_r, um weitere Informationen zu seinem tatsächlichen Typ anzuzeigen. Von dort aus stoßen Sie wahrscheinlich auf funkiges Verhalten im Zusammenhang mit Typcasting, wenn Sie Zahlen mit Strings vergleichen ... Verwenden Sie entweder in_array(.., .., true) für strikte Vergleiche, oder ermitteln Sie, was Ihr leeres Element in diesem Array ist und vermeiden Sie es zu erstellen.

+0

Danke. Der Parameter $ exclude kommt direkt aus einem leeren Eingabefeld. Mit dem strikten Vergleich gearbeitet. Ich werde diese Antwort als richtig markieren, sobald sie es mir erlaubt. –

Verwandte Themen