Qual è un modo semplice per mettere un elemento nel mezzo di un array PHP?

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

  •  05-07-2019
  •  | 
  •  

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.

È stato utile?

Soluzione

array_splice () fa

$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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top