2011-10-26 12 views
6

Ho un array come questo:Trova le lacune in un elenco di numeri

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => 10 
    [4] => 11 
    [5] => 12 
    [6] => 13 
    [7] => 14 
    [8] => 23 
    [9] => 24 
    [10] => 25 
) 

e voglio colmare le lacune in modo che assomiglia a questo:

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
    [3] => xxx 
    [4] => 10 
    [5] => 11 
    [6] => 12 
    [7] => 13 
    [8] => 14 
    [9] => xxx 
    [10] => 23 
    [11] => 24 
    [12] => 25 
) 

Se si guardano i valori del primo array ci sono 1,2,3 e poi un gap e poi 10,11,12,13,14 e poi un gap e poi 23,24,25 .. Come posso trovare a livello di programmazione questi gap e aggiungere un nuovo elemento dell'array al suo posto

Ci saranno un massimo di due spazi vuoti.

Non riesco a pensare a un buon modo per fare questo, qualche idea? Grazie.

+0

Puoi spiegare meglio? –

+0

Ho aggiunto una spiegazione migliore. – 472084

risposta

2

Un semplice for loop, senza copiare l'array, ma solo alterare l'originale:

$repl = 'xxx'; 

for ($i=1; $i<count($array); $i++) { 
    $valueR = $array[$i]; 
    $valueL = $array[$i-1] === $repl ? $array[$i-2] : $array[$i-1]; 
    if ($valueR > $valueL + 1) { 
     array_splice($array, $i++, 0, $repl); 
    } 
} 
+0

+1 per ridurre la complessità dello spazio – Jordan

1

vorrei fare qualcosa di simile, non testato ma dovrebbe funzionare :)

$oldArray = array(1,2,3,10,11,12,13,24,25,26,27); 

$newArray = array(); 
for($i=0;$i<count($oldArray);$i++){ 
    $newArray[] = $oldArray[$i]; 
    if($oldArray[$i+1] - $oldArray[$i] != 1 && $i+1 != count($oldArray)) 
     $newArray[] = "xxx"; // seperator 
} 

var_dump($newArray); 

Shai

+0

Sembra aggiungere un extra xxx alla fine dell'array? – 472084

+0

Controllare il codice aggiornato, aggiunto un controllo per assicurarsi che questo non sia l'ultimo elemento. –

1
$result = array(); 
if (count($oldArray) > 0) 
{ 
    $result[] = $oldArray[0]; 
    for ($i=1; $i<count($oldArray); $i++) 
    { 
     if ($oldArray[$i]-$oldArray[$i-1] != 1) 
      $result[] = "xxx"; 
     $result[] = $oldArray[$i]; 
    } 
} 
+0

Ciò rimuove alcuni degli elementi di matrice originali. – 472084

+0

@Jleagle la vecchia risposta lo ha fatto; non quello aggiornato. –

+0

@Hasan Khan: Ci sono due errori di sintassi (manca '$'). E non capisco come 'count ($ result)' possa essere maggiore di 0 a questo punto. – netcoder

Problemi correlati