Qual è un modo semplice per mettere un elemento nel mezzo di un array PHP?
Domanda
Supponi di avere un array indicizzato di 10 elementi e di voler posizionare un elemento da qualche parte nel mezzo (ad esempio indice 3). Quindi voglio avere il resto del turno di array e quindi essere lungo 11 elementi. C'è un modo semplice per farlo?
Sono sorpreso che non ci sia put ()
o qualcosa del genere.
So che sarebbe abbastanza facile farlo con una combinazione di array_splice
e array_merge
ma mi chiedevo solo se ci fosse un modo più semplice.
Soluzione
$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple");
// $input is now array("red", "green", "blue", "purple", "yellow");
Altri suggerimenti
Purtroppo la tua scommessa migliore è quella che hai descritto nel tuo post.
Se usi array_splice (), PHP dovrà comunque copiare metà dell'array per eseguire l'inserimento, il che sarà un successo prestazionale per array di grandi dimensioni. Forse dovresti usare un elenco o una struttura di dati ad albero invece?
L'unica volta che ho mai avuto bisogno di inserire nel mezzo di un array è stato quando stavo facendo un'operazione che è sostanzialmente simile all'ordinamento di inserzione. Forse desideri archiviare gli elementi non ordinati in un array e quindi ordinarli dopo averli aggiunti tutti?
Nessuna funzione PHP attualmente può gestirlo. Non è troppo difficile montare il tuo, tuttavia:
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);
Si tradurrà in:
Array
(
[0] => a
[1] => b
[2] => d
[3] => e
)
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
)
Probabilmente puoi aggiungere dei controlli se la posizione è più grande dell'array, l'inserimento non è un array, ecc.