Tools

Range Optimizer

  • Arokettu\IP\Tools\RangeOptimizer::optimizeV4(...$ranges)

  • Arokettu\IP\Tools\RangeOptimizer::optimizeV6(...$ranges)

Range optimizer allows you to transform a set of IP ranges into an equivalent smaller set by discarding overlapping ranges and gluing adjacent ranges. Example:

<?php

 use Arokettu\IP\IPv4Range;
 use Arokettu\IP\Tools\RangeOptimizer;

 $ranges = [
     // ranges that are contained in the first one
     IPv4Range::fromString('127.0.0.0/8'),
     IPv4Range::fromString('127.0.0.0/16'),
     IPv4Range::fromString('127.0.64.0/24'),
     // adjacent ranges that can be combined
     IPv4Range::fromString('192.168.0.0/24'),
     IPv4Range::fromString('192.168.1.0/24'),
     IPv4Range::fromString('192.168.2.0/23'),
 ];

 $optimized = RangeOptimizer::optimizeV4(...$ranges); // 127.0.0.0/8, 192.168.0.0/22

Compare Helper

  • Arokettu\IP\Tools\CompareHelper::compare($left, $right, $strict = false)

  • Arokettu\IP\Tools\CompareHelper::strictCompare($left, $right)

  • Arokettu\IP\Tools\CompareHelper::nonStrictCompare($left, $right)

Just a wrapper that executes $left->compare($right). A useful shortcut for sorting:

<?php

use Arokettu\IP\Tools\CompareHelper;

$addresses = [/* IP addresses */];
usort($addresses, CompareHelper::nonStrictCompare(...));

// or

$ranges = [/* IP ranges */];
usort($ranges, CompareHelper::nonStrictCompare(...));
  • Arokettu\IP\Tools\CompareHelper::sort(&$array, $strict = false)

  • Arokettu\IP\Tools\CompareHelper::asort(&$array, $strict = false)

Uses the helper above to call usort or uasort