Quel est un moyen facile de mettre un élément au milieu d'un tableau PHP?

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

  •  05-07-2019
  •  | 
  •  

Question

Disons que vous avez un tableau indexé sur 10 éléments et que vous souhaitez placer un élément quelque part au milieu (par exemple, index 3). Ensuite, je veux que le reste du tableau se déplace et qu’il ait 11 éléments de long. Y a-t-il un moyen facile de faire cela?

Je suis surpris qu'il n'y ait pas de fonction put () ou quelque chose du genre.

Je sais que ce serait assez facile de faire cela avec une combinaison de array_splice et de array_merge mais je me demandais simplement s'il existait un moyen plus simple.

Était-ce utile?

La solution

array_splice () effectue cette opération

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

Autres conseils

Malheureusement, votre meilleur pari est ce que vous avez décrit dans votre message.

Si vous utilisez array_splice (), PHP devra tout de même copier la moitié du tableau pour effectuer l'insertion, ce qui aura un impact négatif sur les performances des tableaux de grande taille. Peut-être devriez-vous utiliser une structure de données de type liste ou arbre à la place?

La seule fois où j'ai eu besoin d'insérer au milieu d'un tableau, c'était lorsque je faisais une opération qui ressemblait beaucoup au tri par insertion. Vous souhaitez peut-être stocker les éléments non triés dans un tableau, puis les trier une fois que vous les avez tous ajoutés?

Aucune fonction PHP ne peut actuellement gérer cela. Il n’est cependant pas trop difficile de préparer le vôtre:

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);

entraînera:

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

Vous pouvez probablement ajouter des vérifications si la position est plus grande que le tableau, l'insertion n'est pas un tableau, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top