老师,可以给我详细解释下这个编程练习的运行过程吗有点不懂

来源:2-13 编程练习

weixin_慕姐0507771

2019-03-28 18:28:24

<?php
$num='0123456789';
$let='abcdefghijklmnopqrstuvwxyz';
$LET='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$str=$num.$let.$LET;//从该给定的字符串中随机抽取元素组成定长的字符串
$len=strlen($str);
for ($i=1;$i<=4;$i++){
   $str1.=substr($str,mt_rand(0,$len-1),1);
}
echo '验证码是:'.$str1;

写回答

2回答

weixin_慕姐0507771

提问者

2019-03-28

谢谢老师懂了

0

好帮手慕查理

2019-03-28

您好,随机数的要随机的是数字、小写字母、大写字母,所以定义了三个变量分别赋值为数字、小写字母、大写字母组成的字符串,也就是:

$num='0123456789';
$let='abcdefghijklmnopqrstuvwxyz';
$LET='ABCDEFGHIJKLMNOPQRSTUVWXYZ';

但是我们需要这三种情况都有可能出现在验证码中,那么便可以把三个变量拼接成一个变量,也就是:存储的数字、小写字母、大写字母。

$str=$num.$let.$LET;

此时开始循环,验证码为四个字符,因此循环为:for ($i=1;$i<=4;$i++){}。

每次循环得到一个字符,然后将字符拼接到$str1变量上,这样当循环完四次的时候,$str1变量上就拼接了四个字符。

而每次得到的字符是从$str变量中取得的,是使用substr函数取出一个字符,现在已知取一个字符和字符串变量是$str,那么从什么位置截取一个呢?此时是用的mt_rand生成一个随机数,从这个随机数的位置取长度为1的字符,但是$str变量的长度是固定的,如果随机数不在$str变量长度范围则取不到值了,因此在循环外计算了$str变量的长度:$len=strlen($str);,此时在循环则是mt_rand(0,$len-1)。(随机数是从0开始,所以会将变量的长度-1)。也就是:

for ($i=1;$i<=4;$i++){
    $str1.=substr($str,mt_rand(0,$len-1),1);
}

最终将$str1变量输出:

echo '验证码是:'.$str1;

注意$str1由于是拼接,所以要在循环外定义一个初始值即$str1="";。如果解决了您的问题,请采纳。祝学习愉快!

0

0 学习 · 4928 问题

查看课程