3

嗨,我有这个功能,它返回一个通知:

注意:未初始化的字符串偏移量

function generaterandomkey($length) {       

    $string='';
    $characters = "0123456789abcdef";
    for ($p = 0; $p < $length ; $p++) {
        $string .= $characters[mt_rand(0, strlen($characters))];            
    }

    return $string;
}

受影响的行是这样的:

$string .= $characters[mt_rand(0, strlen($characters))];

我试过用大括号做,但它不起作用。如果有人可以指出一些建议,我将不胜感激。谢谢。

4

2 回答 2

9

你偶尔会$characters因为strlen($characters),应该是超支strlen($characters) - 1。你的随机范围应该从零开始,你需要以长度减一结束。如果 的长度$characters为 10,则最后一个从零开始的数组索引为9,这将成为随机选择的上限。

$string='';
$characters = "0123456789abcdef";
for ($p = 0; $p < $length ; $p++) {
    $string .= $characters[mt_rand(0, strlen($characters) - 1)]; 
}

mt_rand()因为您是随机选择的,所以您不会总是收到通知 - 只有在循环中的某个点返回其最大值时才会发生。

于 2013-03-21T02:58:23.323 回答
0

最好的方法:将您的字符串表达式转换为数组,然后转换为这样的字符串:

函数readnumber知道任意长度的数字:

function readnumber($str, $i) 
{
    $string=$str;
    $number = '';
    $s="";
    for($j=0;$j<strlen($string);$j++)
    {
        $char=$string[$j];
        $char.=" ";
        $s.=$char;
    }
    $s=explode(" ",$s);
    while ($this->is_number($s[$i]))
        $number .= $s[$i++];        
    return $number;
}

可以这样使用它:

$str="154+458-8";
$number=readnumber($str,1);
echo($number);
于 2017-05-28T20:25:06.307 回答