【www.gdgbn.com--php入门】

首先,我们用数组模拟一个参数传递。接收到的是一组ID,我在这里给它命名为 $nums:


$nums[] = 1;

$nums[] = 2;

$nums[] = 3;

$nums[] = 4;


然后,我们用 $data 数组摸拟一个数据表中存放的内容,有ID,用户名:


$data[0]["id"] = 1;

$data[0]["name"] = "aaa";

$data[1]["id"] = 2;

$data[1]["name"] = "bbb";

$data[2]["id"]      = 3;

$data[2]["name"]   = "ccc";

$data[3]["id"]      = 4;

$data[3]["name"]   = "ddd";


接下来,我们再用 $rs 数组摸拟另一个表中存放的内容,也是相对应的,有相同的ID,然后这个表中存放的是电话号码:


$rs[0]["id"]       = 1;

$rs[0]["mobile"]   = "1111111";

$rs[1]["id"]       = 2;

$rs[1]["mobile"]   = "2222222";

$rs[2]["id"]       = 10;

$rs[2]["mobile"]   = "3333333";

$rs[3]["id"]       = 4;

$rs[3]["mobile"]   = "4444444";

 

 

 

 

 


现在,我们要做的就是要从 $data 和 $rs 这两个数组中,读取出与ID相对应的用户名和电话号码,用列表显示出来:


echo "";


foreach ($nums AS $k => $v) {


    // 模拟读取数据库中 $nums == $data["id"] 的数据, 获取用户名

    foreach ($data AS $kd => $vd) {

        if ($v == $vd["id"]) {

            $names = $vd["name"];

        }

    }


    // 模拟读取数据库中 $nums == $rs["id"] 的数据, 获取手机号码

    foreach ($rs AS $kr => $vr) {

        if ($v == $vr["id"]) {

            $mobile = $vr["mobile"];

        }

    }


    echo "

                " . $v . "

                " . $names . "

                " . $mobile . "

            ";

}


echo "";

 

然后,写到这里后,我就运行这个页面了,可是,当我运行完了页面后,发现,出问题了:

 


如图所示,ID == 3 的用户的电话号码变成了ID == 2 ,的电话号码了。


为什么会这样呢。。让我们来检查一下我们的代码吧:


首先,$nums 数组中的“id”是1,2,3,4  没错,$data 数组中的“id”也是1,2,3,4  也没错,但是, $rs 数组中的“id“却有问题了,是 1,2,10,4。这里就没有3了。


所以读取不到电话号码。但是为什么在 id == 3 的那一列中,电话号码会显示出 id == 2的电话号码呢?我们接着往下看:


 // 模拟读取数据库中 $nums == $rs["id"] 的数据, 获取手机号码

    foreach ($rs AS $kr => $vr) {

        if ($v == $vr["id"]) {

            $mobile = $vr["mobile"];

        }

    }


我们是在这里给 $mobile 赋的值,当  $nums 中的“id” 等于 $rs 中的 “id” 时,它就把 $rs 中的电话号码赋给 $mobile变量,当执行完 id == 2 以后,进行第三次循环时,我们发现,这里条件不符,所以直接跳过了。 但是,$mobile 的值仍然是 id == 2 的时候的值! 对。这就是问题所在了!


找到问题过后,小编我休息了下,喝了口凉水,然后在foreach语句结束之前把所有循环的变量全部给unset() 了,

本文来源:http://www.gdgbn.com/jiaocheng/22288/