2013-01-16 192 views
0

我有以下递归函数,如果它必须循环一次将不会返回任何东西。我可以在返回条件中回显用户名,并在循环后显示正确的用户名,并带有附加数字(例如jdoe_45),但不会返回。这个递归PHP函数为什么不起作用?

function createUsername ($conn, $firstname, $lastname, $numerate = false) { 

    $fn = preg_replace("/[^A-Za-z0-9 ]/", '', $firstname); 
    $ln = preg_replace("/[^A-Za-z0-9 ]/", '', $lastname); 

    $arg = ($numerate) ? '_' . rand(11, 99) : ''; 

    $username = strtolower(substr($fn, 0, 1) . $ln . $arg); 

    $sql = "SELECT * FROM users WHERE username = '$username'"; 
    $rs = mysql_query($sql, $conn) or die ("Could not execute query."); 
    $num = mysql_numrows($rs); 

    if ($num == 0) { 

     return $username; 
    } 

    createUsername($conn, $firstname, $lastname, 1); 
} 

回答

0

你需要来回报您的递归调用,以及:

return createUsername($conn, $firstname, $lastname, 1); 

目前,您只返回$num == 0时。 OMG!

+0

谢谢。这解决了它。不知道那个。 – drpudding

0

你忘了取结果:

if ($num == 0) { 
    $row = mysql_fetch($rs); 
    $username = $row['username']; 
    return $username; 
} 
+0

OMG!这赢得了我2013年的最佳监督。谢谢。 – drpudding

+0

如果你没有返回行('$ num == 0'),那么获取数据对你没有任何好处。 –

+0

对。我只是意识到这并不重要。我不想从数据库返回数据。我只是测试用户是否已经在场。那么为什么这不起作用,并没有返回我构建的用户名。那么,为什么这不起作用呢?尽管用户名已传递到条件中,但没有返回。 – drpudding

相关问题