IP アドレスとそれぞれのサブネット情報を含む配列があります。初めて、サブネット情報をデータベースに追加する必要がありますが、このコードを使用して、重複することなくそうしようとしています
#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 を取得します。2 番目の foreach は、すべてのサブネットをスキャンし、重複 (それ自体を含む) を見つけようとします。存在する場合は、IP アドレス情報を配列に追加してから、別のループにサブネットを再挿入したくないため、この要素の設定を解除する必要があります。
ただし、最終的にすべてのサブネットと IP アドレスが挿入されるため、これは正しく設定解除されていないようです (すべてのサブネットを挿入すると、多くの重複が発生します)。
設定解除が正しく機能しない理由を誰かに説明してもらえますか? 私が2レベルのforeachに夢中だからですか?
ありがとうございました。