首先,我們用數組模擬一個參數傳遞。接收到的是一組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() 了,