나는 IP 주소와 각각의 서브넷 정보를 포함하는 배열을 가지고 있습니다. 첫 번째 시간에, 나는 내 데이터베이스에 서브넷 정보를 추가해야하지만 첫 번째 foreach는 모든 서브넷을 추가하고 각 ID를 검색합니다다중 foreach에 PHP unset 배열
#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는 모든 서브넷을 검색하여 복제본 (자체 포함)을 찾으려고합니다. 그렇다면 ip addresse 정보를 배열에 추가 한 다음이 요소를 설정 해제해야합니다. 서브넷을 다른 루프에 다시 삽입하고 싶지 않기 때문입니다.
그러나 결국에는 모든 서브넷과 IP 주소가 삽입되므로 모든 서브넷을 삽입하면 많은 중복이 발생하므로 올바르게 설정하지 않은 것 같습니다.
아무에게도 왜 설정이 제대로 작동하지 않는지 설명 할 수 있습니까? 내가 2 수준의 foreach에 속해 있기 때문인가?
감사합니다.
이 순서를 뒤집어서 생각해 보셨습니까? 데이터베이스를 먼저 확인하고 일치하는 항목이없는 경우에만 새 레코드를 추가하십시오. 추가, 확인 및 제거하는 대신 – Dave