2016-02-17 12 views
6

Per il mio progetto corrente ho bisogno di un utente per definire un intervallo di numeri che è memorizzato in un database.PHP ottiene una serie di numeri dalla stringa con intervallo

La seguente stringa è una possibile input dell'utente:

1025-1027,1030,1032-1034 

voglio elaborare questa stringa con php per ottenere un array di numeri possibili compresa la possibilità di aggiungere un intervallo di numeri con n-n² o aggiunta di singoli numeri separati da n; n² che per questo esempio potrebbe essere:

1025 1026 1027 1030 1032 1031 1034 

risposta

4

Split stringa di input da virgola e quindi vedere che ciascun elemento del nuovo array è. Se ha il delimitatore gamma (-), aggiungere ogni numero della serie alla matrice:

$input = '1025-1027,1030,1032-1034'; 

$inputArray = explode(',', $input); 
$outputArray = array(); 

foreach($inputArray as $v) { 
    if(strpos($v, '-') === false) { 
     $outputArray[] = $v; 
    } else { 
     $minMax = explode('-',$v); 

     if($minMax[0]<=$minMax[1]) { 
      $outputArray = array_merge($outputArray, range($minMax[0], $minMax[1])); 
     } 
    } 
} 

print_r($outputArray); 

Il valore restituito alla fine è

Array 
(
    [0] => 1025 
    [1] => 1026 
    [2] => 1027 
    [3] => 1030 
    [4] => 1032 
    [5] => 1033 
    [6] => 1034 
) 
+0

Grazie mille. Questo funziona perfettamente. –

3

altro modo/variante potrebbe essere quella explode sia , e -, poi map ciascun gruppo esplosa quindi utilizzare range, dopo la creazione gamme, riemergere il gruppo:

$input = '1025-1027,1030,1032-1034'; 
// explode, map, explode, create range 
$numbers = array_map(function($e){ 
    $range = explode('-', $e); 
    return (count($range) > 1) ? range(min($range), max($range)) : $range; 
}, explode(',', $input)); 
// re merge 
$numbers = call_user_func_array('array_merge', $numbers); 
print_r($numbers); 
Problemi correlati