PHP expert |
|
<?php
function checkRanges($array)
{
// paar values setten
$prev = 0;
$output = $subset = array();
if(is_array($array) && sizeof($array))
{
// eventuele associatieve keys verwijderen
$array = array_values($array);
// door de array loopen
foreach($array as $k => $value)
{
// bij de eerste uitvoering is $k = 0 -> false
if($k && $value == ($prev + 1))
{
// We zijn voorbij de eerste lus en het huidige getal volgt op het vorige
if(sizeof($subset))
{
// Getalletje toevoegen aan de range
$subset[] = $value;
}
else
{
// Eerste twee getallen uit de range
$subset = array($prev, $value);
}
}
else
{
// output genereren
if(sizeof($subset))
{
// We zitten met een range (met als einde het vorige getal)!
array_pop($output);
$output[] = array_shift($subset) . '-' . array_pop($subset);
$output[] = $value;
$subset = array();
}
else
{
// Gewoon getalletje :)
$output[] = $value;
}
}
$prev = $value;
}
return $output;
}
else
{
return false;
}
}
$array = array(110,113,114,115,120,123,124,125,126,127,128,130);
echo implode(', ', $array) . PHP_EOL;
echo implode(',', checkRanges($array));
<?php function checkRanges($array) { // paar values setten $prev = 0; $output = $subset = array(); { // eventuele associatieve keys verwijderen // door de array loopen foreach($array as $k => $value) { // bij de eerste uitvoering is $k = 0 -> false if($k && $value == ($prev + 1)) { // We zijn voorbij de eerste lus en het huidige getal volgt op het vorige { // Getalletje toevoegen aan de range $subset[] = $value; } else { // Eerste twee getallen uit de range $subset = array($prev, $value); } } else { // output genereren { // We zitten met een range (met als einde het vorige getal)! $output[] = $value; } else { // Gewoon getalletje :) $output[] = $value; } } $prev = $value; } return $output; } else { return false; } } $array = array(110,113,114,115,120,123,124,125,126,127,128,130);
Deed het voor mij, er staat voldoende uitleg in de code. |