Reputation: 2269
Hi I have this function and it returning a notice:
Notice: Uninitialized string offset
function generaterandomkey($length) {
$string='';
$characters = "0123456789abcdef";
for ($p = 0; $p < $length ; $p++) {
$string .= $characters[mt_rand(0, strlen($characters))];
}
return $string;
}
The affected line is this:
$string .= $characters[mt_rand(0, strlen($characters))];
I have tried doing with braces and it does not work. If someone can point out some suggestions, I would highly appreciate it. Thanks.
Upvotes: 3
Views: 20714
Reputation: 11
the best way : convert your string expression to array and then convert to string like this:
function readnumber
know a number with any length:
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;
}
can use it like this:
$str="154+458-8";
$number=readnumber($str,1);
echo($number);
Upvotes: 0
Reputation: 270637
You are occasionally overrunning $characters
because of strlen($characters)
, which should be strlen($characters) - 1
. Your random range should begin with zero, and you need to end with the length minus one. If the length of $characters
is 10, then the last zero-based array index is nine, and that becomes your upper bound for random selection.
$string='';
$characters = "0123456789abcdef";
for ($p = 0; $p < $length ; $p++) {
$string .= $characters[mt_rand(0, strlen($characters) - 1)];
}
Because you are choosing randomly, you wouldn't always receive the notice -- it would only occur if mt_rand()
returned its maximum value at some point in your loop.
Upvotes: 9