Привет, у меня есть эта функция, и она возвращает уведомление:
Примечание. Неинициализированное смещение строки
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))];
Я пробовал делать с фигурными скобками, и это не работает. Если кто-то может указать некоторые предложения, я был бы очень признателен. Благодарю.
Из-за strlen($characters)
вы иногда превышаете $characters
, что должно быть strlen($characters) - 1
. Ваш случайный диапазон должен начинаться с нуля, и вам нужно положить конец минус один . Если длина $characters
равна 10, то последний индекс массива с нулевым значением равен девяти , и это становится вашей верхней границей для случайного выбора.
$string=''; $characters = "0123456789abcdef"; for ($p = 0; $p < $length ; $p++) { $string .= $characters[mt_rand(0, strlen($characters) - 1)]; }
Поскольку вы выбираете случайным образом, вы не всегда получите уведомление – это произойдет только в том случае, если mt_rand()
максимальное значение в какой-то момент вашего цикла.
лучший способ: преобразовать строковое выражение в массив и затем преобразовать в строку следующим образом:
function 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);