2010-11-11 14 views

Respuesta

9

Probar:

array_splice($array, 2 /*offset*/, 0 /*length*/, 3 /*value*/); 

cuenta que esto también reordenar las claves de la matriz de entrada de 0 a n-1.

(Edit: El valor de retorno no se utiliza en este caso.)

+0

Esto devuelve una matriz vacía – Harmen

+0

Sí, ya he corregido mi respuesta. Devuelve los elementos que se extrajeron, que no es nada en este caso. Modifica la matriz de entrada original por referencia. – Matthew

+0

konforence, -1 se convierte en +1;) – Harmen

6
array_merge(array_slice($array,0,2),array(3),array_slice($array,2)) 
1
function array_insert($array,$pos,$val) 
{ 
    $array2 = array_splice($array,$pos); 
    $array[] = $val; 
    $array = array_merge($array,$array2); 

    return $array; 
} 

uso:

array_insert($a,2,3); 
+1

En realidad, has reconstruido 'array_splice()' – Harmen

+0

Esa es la razón por la que hay tantas funciones de matriz en PHP: escribir la tuya es normalmente más rápido que leer las sutilezas de la construcción en los que están en el manual :) –

+0

wow, aprendemos algo nuevo todos los días. gracias por el puntero @Harmen :) +1 – tpae

4

Tal vez me falta la complejidad de su pregunta, pero el siguiente no te da lo que quieres?

$array[] = 3; 
sort($array); 
2

Por último, pero no menos importante:

  1. Anexar cosas nuevas al final de la matriz
  2. ordenar la matriz cuando finalmente lo necesite: asort()
2
function insertMissingIntoArray($values = array(), $valueIncrement = 1) { 
    $lastValue = 0; 
    foreach ($values as $key=>$val) { 
     if ($key != 0) { 
      if ($val != $lastValue + $valueIncrement) { 
       array_splice($values, $key, 0, $val); 
      } 
      $lastValue = $val; 
     } 
    } 
    return $values; 
} 

usados como este:

$values = array(1,2,4,5,7,9); 
$fixedValues = insertMissingIntoArray($values, 1); 
// $fixedValues now is (1,2,3,4,5,6,7,8,9) 
Cuestiones relacionadas