<?php
$a = array(
'192.168.11.12/24',
'62.10.11.12/32',
'128.10.11.12/8',
'96.50.51.52/16',
'192.168.1.188/27'
);
$b = array(
'192.168.128.0', // kein Treffer
'192.168.11.255', // Treffer
'62.10.11.255', // kein Treffer
'62.10.11.12', // Treffer
'128.255.255.255', // Treffer
'129.255.255.255', // kein Treffer
'96.50.255.255', // Treffer
'97.50.51.52', // kein Treffer
'192.168.1.189', // Treffer
'192.168.1.89' // kein Treffer
);
function f(array $a)
{
$new = array();
foreach ($a as $item) {
list($ipv4, $cidr) = explode('/', $item);
$iplong = ip2long($ipv4);
$iplong >>= 32 - $cidr;
if (!isset($new[$cidr])) {
$new[$cidr] = array();
}
$new[$cidr][$iplong] = true;
}
return $new;
}
function g(array $a2, array $b)
{
foreach ($b as $item) {
$iplong = ip2long($item);
for ($i = 1; $i <= 32; $i++) {
if (isset($a2[$i][$iplong >> 32 - $i])) {
echo $item . '- Treffer' . '(' . $i . ')' . "\n";
continue 2;
}
}
echo $item . ' - kein Treffer' . "\n";
}
}
$a2 = f($a);
g($a2, $b);
preferences:
24.87 ms | 405 KiB | 5 Q