【发布时间】:2017-01-12 17:25:10
【问题描述】:
<?php
function generateRandomString($length = 10, $alpha = false, $numeric = false) {
if ($alpha) { $characters = 'ABCDEFGHJKLMNPQRSTUVWXYZ'; }
if ($numeric) { $characters = '0123456789'; }
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; ++$i) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
if (substr($randomString, 0, 1) != 2) { // if doesn't start with 2
generateRandomString($length, $alpha, $numeric); // try again
}
else {
return $randomString;
}
}
$num = generateRandomString(8, false, true);
echo ($num);
我需要它返回一个以2 开头的值,但它根本不返回任何内容,也没有错误。我在这里做错了什么?
【问题讨论】:
-
return generateRandomString(...); -
问题标题说它调用:递归调用不返回...
-
1) 递归调用函数没有什么特别之处。将内部
generateRandomString调用替换为对任何其他函数(如substr)的调用,问题就很明显了。 2) 如果您的要求是生成一个以2开头的字符串...呃...您如何以$randomString = '2'开头而不是产生潜在的无限递归? -
如果两个不同的参数
$alpha和$numeric互斥并且不能同时为假(默认值),那么它们有什么意义呢? -
另外……如果我打电话给
generateRandomString(8, true, true)怎么办?然后我不会收到字母数字结果。如果我调用generateRandomString(8, true),函数将永远不会完成。