2011-10-26 24 views
6

Tengo una matriz de esta manera:Encuentra vacíos en una lista de números

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

Y quiero llenar los vacíos por lo que se ve así:

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 
) 

Si nos fijamos en los valores de la primera matriz hay 1,2,3 y luego una brecha y luego 10,11,12,13,14 y luego una brecha y luego 23,24,25. ¿Cómo puedo encontrar estas lagunas programáticamente y agregar una nueva brecha? elemento de matriz en su lugar

Habrá un máximo de dos espacios.

No puedo pensar en una buena manera de hacer esto, ¿alguna idea? Gracias.

+0

¿Puede explicar mejor? –

+0

Agregué una mejor explicación. – 472084

Respuesta

2

Un simple bucle for, sin copiar la matriz, pero sólo alterar el original:

$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 para menor complejidad de espacio – Jordan

1

me gustaría hacer algo como esto, no se ha probado, pero debería funcionar :)

$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

Esto parece agregar un xxx adicional al final de la matriz? – 472084

+0

Compruebe el código actualizado, agregue un cheque para asegurarse de que este no sea el último 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

Esto elimina algunos de los elementos de matriz originales. – 472084

+0

@Jleagle la vieja respuesta hizo eso; no el actualizado –

+0

@Hasan Khan: Tiene dos errores de sintaxis allí (falta '$'). Y no entiendo cómo 'count ($ result)' puede ser mayor que 0 en este punto. – netcoder

Cuestiones relacionadas