Question PHP: Supprimer un élément d'un tableau


Y at-il un moyen facile de supprimer un élément d'un tableau en utilisant PHP, tel que foreach ($array) n'inclut plus cet élément?

Je pensais que le réglage à null le ferait, mais apparemment cela ne fonctionne pas.


1968
2017-12-15 20:28


origine


Réponses:


Il existe différentes manières de supprimer un élément de tableau, certaines étant plus utiles pour certaines tâches spécifiques que d'autres.

Supprimer un élément de tableau

Si vous voulez supprimer un seul élément de tableau, vous pouvez utiliser unset() ou alternative array_splice().

Aussi, si vous avez la valeur et ne connaissez pas la clé pour supprimer l'élément, vous pouvez utiliser array_search() pour obtenir la clé.

unset() méthode

Notez que lorsque vous utilisez unset() les touches du tableau ne changeront pas / réindexeront. Si vous voulez réindexer les clés, vous pouvez utiliser array_values() après unset() qui convertira toutes les clés en clés numériques énumérées à partir de 0.

Code

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    unset($array[1]);
               //↑ Key which you want to delete

?>

Sortie

Array (
    [0] => a
    [2] => c
)

array_splice() méthode

Si tu utilises array_splice() les clés seront automatiquement réindexées, mais les clés associatives ne changeront pas par opposition à array_values() qui va convertir toutes les clés en clés numériques.

Aussi array_splice() a besoin de l'offset, pas de la clé! comme le deuxième paramètre.

Code

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    array_splice($array, 1, 1);
                       //↑ Offset which you want to delete

?>

Sortie

Array (
    [0] => a
    [1] => c
)

array_splice() pareil que unset() Prenez le tableau par référence, cela signifie que vous ne voulez pas affecter les valeurs de retour de ces fonctions au tableau.

Supprimer plusieurs éléments de tableau

Si vous souhaitez supprimer plusieurs éléments de tableau et ne souhaitez pas appeler unset() ou array_splice() plusieurs fois, vous pouvez utiliser les fonctions array_diff() ou array_diff_key() en fonction de si vous connaissez les valeurs ou les clés des éléments que vous souhaitez supprimer.

array_diff() méthode

Si vous connaissez les valeurs des éléments du tableau que vous voulez supprimer, vous pouvez utiliser array_diff(). Comme avant avec unset() il ne changera / réindexera pas les clés du tableau.

Code

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    $array = array_diff($array, ["a", "c"]);
                              //└────────┘→ Array values which you want to delete

?>

Sortie

Array (
    [1] => b
)

array_diff_key() méthode

Si vous connaissez les clés des éléments que vous voulez supprimer, alors vous voulez utiliser array_diff_key(). Ici, vous devez vous assurer que vous passez les clés en tant que clés dans le deuxième paramètre et non en tant que valeurs. Sinon, vous devez retourner le tableau avec array_flip(). Et aussi ici les clés ne changeront pas / reindex.

Code

<?php

    $array = array(0 => "a", 1 => "b", 2 => "c");
    $array = array_diff_key($array, [0 => "xy", "2" => "xy"]);
                                   //↑           ↑ Array keys which you want to delete
?>

Sortie

Array (
    [1] => b
)

Aussi, si vous voulez utiliser unset() ou array_splice() supprimer plusieurs éléments avec la même valeur que vous pouvez utiliser array_keys() pour obtenir toutes les clés pour une valeur spécifique, puis supprimez tous les éléments.


2225
2017-12-15 21:25



Il convient de noter que unset() conservera les index intacts, ce qui est ce à quoi vous vous attendez lors de l'utilisation d'index de chaînes (tableau comme hashtable), mais peut être assez surprenant lorsque vous travaillez avec des tableaux indexés entiers:

$array = array(0, 1, 2, 3);
unset($array[2]);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [3]=>
  int(3)
} */

$array = array(0, 1, 2, 3);
array_splice($array, 2, 1);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(3)
} */

Alors array_splice() peut être utilisé si vous souhaitez normaliser vos clés entières. Une autre option utilise array_values() après unset():

$array = array(0, 1, 2, 3);

unset($array[2]);
$array = array_values($array);
var_dump($array);
/* array(3) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(3)
} */

1299
2017-08-02 15:57



  // our initial array  
   $arr = array("blue", "green", "red", "yellow", "green", "orange", "yellow", "indigo", "red");  
  print_r($arr);

  // remove the elements who's values are yellow or red  
   $arr = array_diff($arr, array("yellow", "red"));
  print_r($arr);  

C'est la sortie du code ci-dessus:

Array
(
    [0] => blue
    [1] => green
    [2] => red
    [3] => yellow
    [4] => green
    [5] => orange
    [6] => yellow
    [7] => indigo
    [8] => red
)

Array
(
    [0] => blue
    [1] => green
    [4] => green
    [5] => orange
    [7] => indigo
)

Maintenant, array_values ​​() réindexera bien un tableau numérique, mais supprimera toutes les chaînes de caractères du tableau et les remplacera par des nombres. Si vous devez conserver les noms de clé (chaînes) ou réindexer le tableau si toutes les clés sont numériques, utilisez array_merge ():

$arr = array_merge(array_diff($arr, array("yellow", "red")));
print_r($arr);

les sorties

Array
(
    [0] => blue
    [1] => green
    [2] => green
    [3] => orange
    [4] => indigo
)

320
2017-11-15 11:29



$key = array_search($needle,$array);
if($key!==false){
    unset($array[$key]);
}

175
2017-12-15 20:31



unset($array[$index]);

58
2017-11-26 08:25



Si vous avez un tableau indexé numériquement où toutes les valeurs sont uniques (ou non uniques mais que vous souhaitez supprimer toutes les occurrences d'une valeur particulière), vous pouvez simplement utiliser array_diff () pour supprimer un élément correspondant, comme ceci:

$my_array = array_diff($my_array, array('Value_to_remove'));

Par exemple:

$my_array = array('Andy', 'Bertha', 'Charles', 'Diana');
echo sizeof($my_array) . "\n";
$my_array = array_diff($my_array, array('Charles'));
echo sizeof($my_array);

Cela affiche les éléments suivants:

4
3

Dans cet exemple, l'élément avec la valeur 'Charles' est supprimé comme peut être vérifié par les appels sizeof () qui signalent une taille de 4 pour le tableau initial, et 3 après la suppression.


55
2017-07-31 01:06



Aussi, pour un élément nommé:

unset($array["elementName"]);


48
2017-07-19 15:37



Détruire un seul élément d'un tableau

unset()

$array1 = array('A', 'B', 'C', 'D', 'E');
unset($array1[2]); // Delete known index(2) value from array
var_dump($array1);

La sortie sera:

array(4) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "B"
  [3]=>
  string(1) "D"
  [4]=>
  string(1) "E"
}

Si vous avez besoin de réindexer le tableau:

$array1 = array_values($array1);
var_dump($array1);

Ensuite, la sortie sera:

array(4) {
  [0]=>
  string(1) "A"
  [1]=>
  string(1) "B"
  [2]=>
  string(1) "D"
  [3]=>
  string(1) "E"
}

Pop l'élément hors de la fin du tableau - renvoie la valeur de l'élément supprimé

mixed array_pop(array &$array)

$stack = array("orange", "banana", "apple", "raspberry");
$last_fruit = array_pop($stack);
print_r($stack);
print_r('Last Fruit:'.$last_fruit); // Last element of the array

La sortie sera

Array
(
    [0] => orange
    [1] => banana
    [2] => apple
)
Last Fruit: raspberry

Supprimer le premier élément (rouge) d'un tableau, - renvoie la valeur de l'élément supprimé

mixed array_shift ( array &$array )

$color = array("a" => "red", "b" => "green" , "c" => "blue");
$first_color = array_shift($color);
print_r ($color);
print_r ('First Color: '.$first_color);

La sortie sera:

Array
(
    [b] => green
    [c] => blue
)
First Color: red

26
2018-06-11 05:51



<?php
    $stack = array("fruit1", "fruit2", "fruit3", "fruit4");
    $fruit = array_shift($stack);
    print_r($stack);

    echo $fruit;
?>

Sortie:

Array
(
    [0] => fruit2
    [1] => fruit3
    [2] => fruit4
)

fruit1

22
2017-09-22 04:01