如何解决php中未定义的注意事项2和3

如何解决php中未定义的注意事项2和3,php,Php,这是我的密码 <?php $file = fopen("employee.txt","r"); $under_40=0; $salary_sum=0; $emplist=[]; $total_employees=0; echo "Names of all employees whose names end with son : <br/>"; while(!feof($file)) { $t

这是我的密码

<?php 
    $file = fopen("employee.txt","r");
    $under_40=0;
    $salary_sum=0; 
    $emplist=[];
    $total_employees=0;
    echo "Names of all employees whose names end with son : <br/>";
    while(!feof($file))
      {
        $total_employees++;
        $fline=fgets($file);
        list($name, $age, $dept, $salary)= explode(':',$fline);

        if(preg_match("/son$/",$name))
        {
            echo $name."<br/>"; 
        }

        if($age<40)
        {
            $under_40++;
            $salary_sum +=$salary;
            if($salary>40000 )
            {
                $emplist[$name]=$salary;
            }
        }
      }

    if($total_employees>0)
    {
        if($under_40>0)
        {
                $percent=100*$under_40 / $total_employees;
                echo "<br/>Percent of employees under 40 is :".$percent."%<br/>";
                $avg= $salary_sum/$under_40;
                echo "<br/>Averege salary of employees under 40 is :$".$avg."<br/>";
                if(array_keys($emplist))
                {
                    echo "<br/>Sorted list of employees under 40, with salries > \$40000 <br/>";
                    ksort($emplist);
                    echo "<table><tr><td>Name</td><td>Salary</td></tr>";
                    foreach ($emplist as $key=>$value)
                    {
                        echo "<tr><td>".$key."</td><td>\$".$value."</td></tr>";
                    }
                    echo"</table>";
                }
                else
                {
                        echo"There are no employees under 40 who earned over \$40000 <br/>";
                }
        }
        else
        {
                echo"There are no employees under 40 <br/>";
        }
    }
    else
    {
            echo"There are no employees ";
    }
    fclose($file);
?>

预期产量为 姓名以son结尾的所有员工姓名: 约翰逊 爱迪生 莫里森

40岁以下员工的百分比为:40%

40岁以下员工的平均工资为:31000美元

40岁以下员工分类名单,salries>40000美元 姓名工资 哈里:43000美元

但是我越来越像这样了

姓名以son结尾的所有员工姓名:

注意:第12行C:\xampp\htdocs\lab2.php中未定义的偏移量:3

注意:第12行C:\xampp\htdocs\lab2.php中未定义的偏移量:2 约翰逊 爱迪生 莫里森

40岁以下员工的百分比为:50%

40岁以下员工的平均工资为:21000美元

40岁以下员工分类名单,salries>40000美元 姓名工资
Harry$43000

您可以通过以下方式完成阵列:


list($name、$age、$dept、$salary)=数组_pad(explode(“:”,$fline),4,null)

这是否回答了您的问题?在本例中,这意味着
explode(“:”,$fline)
没有返回至少包含四个元素的数组,但是
list($name,$age,$dept,$salary)=
此时需要四个元素。所以你的输入数据(你完全忽略了向我们展示)目前正在处理的行中似乎至少没有三个
。这是我的输入:Harry:30:HR:43000 Johnson:28:IT:20000 John Milton:50:Sales:60000 Edison:45:IT:50000 Morrison:46:IT:200000但如果我这样做,我将获得输出例如:姓名以儿子结尾的所有员工姓名:约翰逊·爱迪生·莫里森40岁以下员工的百分比是:50%40岁以下员工的平均工资是:$21000 40岁以下员工的排序列表,salries>40000美元姓名工资Harry$43000