¿Cuál es una manera fácil de poner un elemento en medio de una matriz de PHP?

StackOverflow https://stackoverflow.com/questions/620709

  •  05-07-2019
  •  | 
  •  

Pregunta

Digamos que tiene una matriz indexada de 10 elementos y desea colocar un elemento en algún lugar en el medio (digamos el índice 3). Entonces quiero tener el resto del cambio de matriz y así tener 11 elementos de longitud. ¿Hay una manera fácil de hacer esto?

Me sorprende que no haya una función put () o algo así.

Sé que sería bastante fácil hacer esto con una combinación de array_splice y array_merge , pero me preguntaba si hay una manera más fácil.

¿Fue útil?

Solución

array_splice () hace esto

$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple");
// $input is now array("red", "green", "blue", "purple", "yellow");

Otros consejos

Desafortunadamente, su mejor apuesta es lo que describió en su publicación.

Si usa array_splice (), PHP todavía tendrá que copiar la mitad de la matriz para hacer la inserción, lo que será un impacto en el rendimiento para tamaños de matriz grandes. ¿Quizás debería usar una lista o una estructura de datos de árbol en su lugar?

La única vez que tuve que insertar en la mitad de una matriz fue cuando estaba realizando una operación que es sustancialmente similar a la ordenación por inserción. ¿Quizás quieras almacenar los elementos sin clasificar en una matriz y luego ordenarlos una vez que los hayas agregado todos?

Ninguna función PHP puede manejar esto actualmente. Sin embargo, no es demasiado difícil preparar el suyo:

function array_insert(&$array, $insert, $position) {
    $c = count($array);
    $slice = array_merge($insert, array_slice($array, $position));
    array_splice($array, $position, $c, $slice);
}

$array = array('a','b','d','e');
print_r($array);
array_insert($array, array('c'), 2);
print_r($array);

resultará en:

Array
(
    [0] => a
    [1] => b
    [2] => d
    [3] => e
)
Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => d
    [4] => e
)

Probablemente pueda agregar controles si la posición es más grande que la matriz, la inserción no es una matriz, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top