Imaginemos que tenemos dos matrices:
$array_1 = array(
'0' => 'zero',
'1' => 'one',
'2' => 'two',
'3' => 'three',
);
$array_2 = array(
'zero' => '0',
'one' => '1',
'two' => '2',
'three' => '3',
);
Ahora, me gustaría insertar array('sample_key' => 'sample_value')
después del tercer elemento de cada matriz. ¿Cómo puedo hacerlo?
Respuestas:
array_slice()
se puede utilizar para extraer partes de la matriz, y el operador de matriz de+
unión ( ) puede recombinar las partes.Este ejemplo:
da:
fuente
+
no debe ser usado! Use en suarray_merge
lugar! ¡Porque si los índices son enteros (matriz normal, no hash),+
no funcionará como se esperaba!array_merge
El comportamiento de las teclas numéricas no es apropiado para esta pregunta.count($array)-3
, simplemente puede especificar nulo para el mismo efecto. Además, usararray_merge
como TMS sugirió no requerirá que use un índice único. EJEMPLO: Agregue "nuevo valor" a una matriz existente:$b = array_merge( array_slice( $a, 0, 1, true ), array( 'new-value' ), array_slice( $a, 1, null, true ) );
+
frentearray_merge
. Si desea insertar cosas en una matriz numérica, no debe usarlas+
porque probablemente no coincidan con sus expectativas. Pero tampoco deberías usarloarray_merge
; Para las matrices numéricas, todo este problema se resuelve con laarray_splice
función. Para las matrices asociativas o mixtas, probablemente no desee que las claves numéricas se vuelvan a indexar, por lo que usarlas+
es completamente apropiado.Para su primera matriz, use
array_splice()
:salida:
para el segundo no hay orden, así que solo tienes que hacer:
Y ordena las llaves por lo que quieras.
fuente
código:
ejemplo:
Puede que realmente no se vea perfecto, pero funciona.
fuente
Aquí hay una función simple que podría usar. Solo enchufar y jugar.
Esto es Insertar por índice, no por valor.
puede elegir pasar la matriz o usar una que ya haya declarado.
EDITAR: Versión más corta:
Ahora puedes probar el código usando
Y el resultado es:
fuente
fuente
Esta función admite:
USO:
RESULTADOS
fuente
Recientemente escribí una función para hacer algo similar a lo que parece que estás intentando, es un enfoque similar a la respuesta de clasvdb.
Básicamente se inserta en un punto específico, pero evita sobrescribir desplazando todos los elementos hacia abajo.
fuente
Si no sabe que desea insertarlo en la posición # 3, pero sabe la clave que desea insertar después, inventé esta pequeña función después de ver esta pregunta.
Aquí hay un violín de teclado para verlo en acción: http://codepad.org/5WlKFKfz
Nota: array_splice () habría sido mucho más eficiente que array_merge (array_slice ()) pero entonces las claves de sus matrices insertadas se habrían perdido. Suspiro.
fuente
Enfoque más limpio (basado en la fluidez de uso y menos código).
Uso:
fuente
La solución más simple, si desea insertar (un elemento o matriz) después de una determinada clave:
Entonces, si tienes:
Y ejecutar:
Tendras:
fuente
Usar array_splice en lugar de array_slice proporciona una llamada de función menos.
fuente
Hago eso como
fuente
Acabo de crear una clase ArrayHelper que haría esto muy fácil para los índices numéricos.
Ejemplo:
A partir de $ array:
Resultado:
fuente
Este es un método mejor para insertar elementos en una matriz en alguna posición.
fuente
Necesitaba algo que pudiera insertar antes, reemplazar, después de la clave; y agregue al inicio o al final de la matriz si no se encuentra la clave de destino. El valor predeterminado es insertar después de la clave.
Nueva función
Codigo de entrada
Salida
fuente
Muy simple respuesta de 2 cadenas a su pregunta:
Al principio, inserta cualquier cosa en su tercer elemento con array_splice y luego asigna un valor a este elemento:
fuente
Esta es una vieja pregunta, pero publiqué un comentario en 2014 y con frecuencia vuelvo a esto. Pensé que dejaría una respuesta completa. Esta no es la solución más corta, pero es bastante fácil de entender.
Inserte un nuevo valor en una matriz asociativa, en una posición numerada, preservando claves y manteniendo el orden.
fuente
No tan concreto como la respuesta de Artefacto, pero basado en su sugerencia de usar array_slice (), escribí la siguiente función:
caracteristicas:
Ejemplos de uso:
fuente
En caso de que solo esté buscando insertar un elemento en una matriz en una posición determinada (según la respuesta de @clausvdb):
fuente
Aquí está mi versión:
fuente
manera fácil ... usando
array_splice()
Resultado..
fuente
Esta es otra solución en
PHP 7.1
fuente
Puede insertar elementos durante un bucle foreach , ya que este bucle funciona en una copia de la matriz original, pero debe realizar un seguimiento del número de líneas insertadas (en este código, llamo a esto "hincha"):
Obviamente, puede generalizar esta idea de "hinchazón" para manejar inserciones y eliminaciones arbitrarias durante el ciclo foreach.
fuente