我有一個數組,其中包含IP地址及其各自的子網信息。在第一時間,我一定要子網信息添加到我的數據庫,但我想沒有任何重複這樣做,與此代碼多個foreach中的PHP未設置數組
#Note that this is pseudo-code
foreach ($subnets as $subnet)
{
$query = 'INSERT INTO subnets (field1, field2)
VALUES ($subnet['subnet'], $subnet['netmask']);'
$database->executeQuery($query);
$query = 'SELECT id FROM subnets
WHERE subnet = $subnet['subnet']
AND mask = $subnet['netmask'];'
$subnet_id = $database->getRow($query);
foreach ($subnets as $key => $subnet_check)
{
if (($subnet['subnet'] == $subnet_check['subnet']) AND ($subnet['netmask'] == $subnet_check['netmask']))
{
$ip_to_add = array_merge($ip_to_add,array(array("subnet_id" => $subnet_id[0], "ip" => $subnet['ip'], "name" => $subnet['name'])));
unset($subnets[$key]);
}
}
}
第一的foreach將增加每個子網和檢索他們的每一個ID的。 第二個foreach將掃描每個子網並嘗試查找重複(包括其本身)。如果是這樣,它應該將ip地址信息添加到數組中,然後取消設置此元素,因爲我們不想在另一個循環中重新插入子網。
然而,這似乎並沒有正確解決它,因爲最後,每個子網和IP地址都被插入(插入所有的子網會帶來很多重複)。
任何人都可以向我解釋爲什麼unset工作不正常?是因爲我進入了2級的foreach嗎?
謝謝。
你有沒有考慮扭轉這個順序?首先檢查數據庫,並且只在沒有找到匹配的情況下添加新記錄?而不是添加,然後檢查,然後刪除 – Dave