嗨,我有这个功能,它会返回一个通知:
注意:未初始化的字符串偏移量
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))];
我尝试过使用大括号,但它不起作用。如果有人可以指出一些建议,我将非常感激。感谢。
答案 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)