Automattic\WooCommerce\Utilities
ArrayUtil::to_ranges_string
Converts an array of numbers to a human-readable range, such as "1,2,3,5" to "1-3, 5". It also supports floating point numbers, however with some perhaps unexpected / undefined behaviour if used within a range. Source: https://stackoverflow.com/a/34254663/4574
Method of the class: ArrayUtil{}
No Hooks.
Returns
String.
Usage
$result = ArrayUtil::to_ranges_string( $items, $item_separator, $range_separator, $sort ): string;
- $items(array) (required)
- An array (in any order, see
$sort)of individual numbers. - $item_separator(string)
- The string that separates sequential range groups.
Default:', ' - $range_separator(string)
- The string that separates ranges. A plausible example otherwise would be
' to '.
Default:'-' - $sort(true|false|true)
- Sort the array prior to iterating? You'll likely always want to sort, but if not, you can set this to false.
Default:true
ArrayUtil::to_ranges_string() ArrayUtil::to ranges string code WC 10.7.0
public static function to_ranges_string( array $items, string $item_separator = ', ', string $range_separator = '-', bool $sort = true ): string {
if ( $sort ) {
sort( $items );
}
$point = null;
$range = false;
$str = '';
foreach ( $items as $i ) {
if ( null === $point ) {
$str .= $i;
} elseif ( ( $point + 1 ) === $i ) {
$range = true;
} else {
if ( $range ) {
$str .= $range_separator . $point;
$range = false;
}
$str .= $item_separator . $i;
}
$point = $i;
}
if ( $range ) {
$str .= $range_separator . $point;
}
return $str;
}