key($file)<count($file)导致的死循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?php header( 'content-type:text/html;charset=utf-8' ); $filename1 = 'PHP.primary.test.php' ; $filename2 = 'JAVA.senior.task.learn.java' ; $filename3 = 'exercise.docx' ; //定义一个能够输出文件名和文件后缀的函数,参数即为题目给定的文件变量 function file_explode( $filename ){ //将$filename以‘.’为标记分割放入数组$file并打印 $file = explode ( '.' , $filename ); echo '文件数组:<pre>' ; print_r( $file ); echo '</pre>' ; $str = '' ; //循环数组$file,输出不带后缀的文件名 while (key( $file )< count ( $file )-1) { $str .= current( $file ). '.' ; // echo $str; next( $file ); } echo '文件名称是:' , substr ( $str ,0,-1), '<br>' ; //输出文件后缀 echo '文件后缀是' , end ( $file ), '<hr>' ; } //调用以上定义的函数,分别完成$filename1、$filename2和$filename3的文件名和后缀输出 file_explode( $filename1 ); file_explode( $filename2 ); file_explode( $filename3 ); ?> |
上面是我写的代码,已经成功完成作业,但是有一点不明白
while循环的条件:key($file)<count($file)-1
为什么要减一,以第一个数组为例PHP.primary.test.php,当前代码循环得到的值是没有后缀.php的,他的key($file)最大是3,count($file)-1的值是3,在我看来是可以相等的,代码是key($file)<count($file),此时循环得到PHP.primary.test.php完整的带后缀的文件名才对,但是他进入死循环了。
我知道当key($file)等于3之后,next($file);会报错,但是他报错不应该进入死循环啊。
我不知道表达的意思清不清楚,麻烦老师解答一下,谢谢!
0
收起
正在回答 回答被采纳积分+1
1回答
PHP小白零基础入门
- 参与学习 人
- 提交作业 626 份
- 解答问题 4928 个
想要学好Web后端开发的中流砥柱语言,本阶段为你轻松铺就扎实的基础,从前端网页布局的搭建到后台PHP开发,助你从零基础到掌握主流开发语言。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧