Heim >Backend-Entwicklung >PHP-Tutorial >Warum gibt meine rekursive PHP-Funktion manchmal „Not Set' anstelle eines eindeutigen Barcodes zurück?
Verwendung von Return innerhalb rekursiver Funktionen in PHP
In PHP können rekursive Funktionen ein leistungsstarkes Werkzeug zur Lösung komplexer Probleme sein. Beim Schreiben rekursiver Funktionen ist die ordnungsgemäße Verwendung der Return-Anweisung von entscheidender Bedeutung, um eine korrekte Logik sicherzustellen und Endlosschleifen zu vermeiden.
Ein Fall, in dem eine solche Verwendung häufig übersehen wird, ist die Generierung eindeutiger Werte, wie im folgenden Szenario veranschaulicht:
Frage:
Ziel ist es, zufällige Barcodes zu generieren, die noch nicht in einer Datenbankspalte vorhanden sind. Die Funktion verwendet Rekursion, um wiederholt Zahlen zu generieren, bis eine eindeutige Zahl gefunden wird. Allerdings gibt die Funktion manchmal „Nicht gesetzt“ zurück, anstatt eine eindeutige Nummer zu erzeugen.
Code:
function generate_barcode() { $barcode = rand(1, 10); $bquery = mysql_num_rows(mysql_query("SELECT * FROM stock_item WHERE barcode='$barcode'")); if ($bquery == 1) { generate_barcode(); } else { return $barcode; } }
Antwort:
Das Problem im bereitgestellten Code liegt im rekursiven Aufruf. Um sicherzustellen, dass die Funktion korrekt eine eindeutige Nummer zurückgibt, muss die neu generierte Nummer vom rekursiven Aufruf selbst zurückgegeben werden:
function generate_barcode() { $barcode = rand(1, 10); $bquery = mysql_num_rows(mysql_query("SELECT * FROM stock_item WHERE barcode='$barcode'")); if ($bquery == 1) { return generate_barcode(); // updated } else { return $barcode; } }
Durch die Rückgabe der generierten Nummer vom rekursiven Aufruf stellt die Funktion sicher, dass der Anrufer erhält die eindeutige Nummer.
Zusätzliche Überlegungen:
Es ist wichtig, eine Exit-Bedingung für die einzufügen Fall, in dem alle Zahlen genommen werden. Wenn keine solche Bedingung vorliegt, ruft sich die Funktion rekursiv auf, bis das PHP-Rekursionslimit erreicht ist, was zu einem Fehler führt.
Das obige ist der detaillierte Inhalt vonWarum gibt meine rekursive PHP-Funktion manchmal „Not Set' anstelle eines eindeutigen Barcodes zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!