php教程 foreach unset
首先,我们用数组模拟一个参数传递。接收到的是一组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 '<table width=400 align=center border=1>';
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 '<tr>
<td>' . $v . ' </td>
<td>' . $names . ' </td>
<td>' . $mobile . ' </td>
</tr>';
}
echo '</table>';
然后,写到这里后,我就运行这个页面了,可是,当我运行完了页面后,发现,出问题了:
如图所示,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() 了,
补充:Php教程,Php入门