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

时间:2013-03-21 02:55:19

标签: php

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

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

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))];

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

2 个答案:

答案 0 :(得分: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()在您的循环中的某个点返回其最大值时才会发生。

答案 1 :(得分:0)

最好的方法:将字符串表达式转换为数组,然后转换为字符串,如下所示:

函数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);

可以像这样使用它:

jsonb_array_elements(data)