key($file)<count($file)导致的死循环

key($file)<count($file)导致的死循环

<?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);会报错,但是他报错不应该进入死循环啊。

我不知道表达的意思清不清楚,麻烦老师解答一下,谢谢!

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕查理 2019-01-10 18:06:33

您好,可以打印一下$file数组,已第一个文件名称为例:数组中的下标为0,1,2,3,而count($file)的值是4,如果没有-1操作,循环时就会是0<4为真,执行;1<4为真,执行;2<4为真,执行;3<4为真,执行;4<4为真,执行,那么程序就会陷入死循环。因此进行-1操作。祝学习愉快!

  • 提问者 辰小七 #1
    为什么4<4会为真啊
    2019-01-10 18:09:32
  • 好帮手慕查理 回复 提问者 辰小七 #2
    您好,抱歉,为假。执行到3<4为真,执行;然后next($file);返回值为null,null<4,程序开始死循环。可以写一个循环,条件为null小于一个数值,循环中输出一条语句,可以发现程序是死循环。祝学习愉快!
    2019-01-10 18:17:15
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
PHP小白零基础入门
  • 参与学习           人
  • 提交作业       626    份
  • 解答问题       4930    个

想要学好Web后端开发的中流砥柱语言,本阶段为你轻松铺就扎实的基础,从前端网页布局的搭建到后台PHP开发,助你从零基础到掌握主流开发语言。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师