3v4l.org

run code in 300+ PHP versions simultaneously
<?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);
Output for 5.6.0 - 5.6.30, 7.0.0 - 7.0.20, 7.1.0 - 7.1.20, 7.2.6 - 7.2.33, 7.3.16 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.26, 8.1.0 - 8.1.13
192.168.128.0 - kein Treffer 192.168.11.255- Treffer(24) 62.10.11.255 - kein Treffer 62.10.11.12- Treffer(32) 128.255.255.255- Treffer(8) 129.255.255.255 - kein Treffer 96.50.255.255- Treffer(16) 97.50.51.52 - kein Treffer 192.168.1.189- Treffer(27) 192.168.1.89 - kein Treffer

preferences:
63.74 ms | 414 KiB | 5 Q