Domanda PHP: cancella un elemento da una matrice


C'è un modo semplice per cancellare un elemento da un array usando PHP, così foreach ($array) non include più quell'elemento?

Ho pensato che l'impostazione null lo farebbe, ma a quanto pare non funziona.


1968
2017-12-15 20:28


origine


risposte:


Esistono diversi modi per eliminare un elemento dell'array, in cui alcuni sono più utili di alcuni compiti specifici di altri.

Elimina un elemento dell'array

Se si desidera eliminare solo un elemento dell'array che è possibile utilizzare unset() o alternativa array_splice().

Inoltre se hai il valore e non conosci la chiave per cancellare l'elemento che puoi usare array_search() per ottenere la chiave.

unset() metodo

Si noti che quando si utilizza unset() le chiavi dell'array non cambieranno / reindicheranno. Se vuoi reindicizzare i tasti che puoi usare array_values() dopo unset() che convertirà tutte le chiavi in ​​chiavi numeriche enumerate a partire da 0.

Codice

<?php

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

?>

Produzione

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

array_splice() metodo

Se usi array_splice() le chiavi saranno automaticamente reindirizzate, ma le chiavi associative non cambieranno a differenza di array_values() che convertirà tutte le chiavi in ​​chiavi numeriche.

Anche array_splice() ha bisogno dell'offset, non della chiave! come secondo parametro

Codice

<?php

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

?>

Produzione

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

array_splice() uguale a unset() prendere la matrice per riferimento, questo significa che non si desidera assegnare i valori di ritorno di tali funzioni all'array.

Elimina più elementi di matrice

Se si desidera eliminare più elementi di matrice e non si desidera chiamare unset() o array_splice() più volte è possibile utilizzare le funzioni array_diff() o array_diff_key() a seconda se si conoscono i valori o le chiavi degli elementi che si desidera eliminare.

array_diff() metodo

Se si conoscono i valori degli elementi dell'array che si desidera eliminare, è possibile utilizzare array_diff(). Come prima con unset() non cambierà / reindicherà le chiavi dell'array.

Codice

<?php

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

?>

Produzione

Array (
    [1] => b
)

array_diff_key() metodo

Se conosci le chiavi degli elementi che vuoi eliminare, allora vuoi usarli array_diff_key(). Qui devi assicurarti di passare le chiavi come chiavi nel secondo parametro e non come valori. Altrimenti, devi capovolgere l'array con array_flip(). E anche qui le chiavi non cambieranno / reindicizzare.

Codice

<?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
?>

Produzione

Array (
    [1] => b
)

Anche se vuoi usarlo unset() o array_splice() per eliminare più elementi con lo stesso valore che è possibile utilizzare array_keys() per ottenere tutte le chiavi per un valore specifico e quindi eliminare tutti gli elementi.


2224
2017-12-15 21:25



Si dovrebbe notare che unset() manterrà intatti gli indici, che è quello che ci si aspetterebbe quando si usano gli indici di stringa (array come hashtable), ma può essere piuttosto sorprendente quando si tratta di array con indice intero:

$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)
} */

Così array_splice() può essere usato se desideri normalizzare le tue chiavi intere. Un'altra opzione sta usando array_values() dopo 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);  

Questo è l'output dal codice sopra:

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
)

Ora, array_values ​​() reinditerà piacevolmente un array numerico, ma rimuoverà tutte le stringhe chiave dall'array e le sostituirà con i numeri. Se è necessario conservare i nomi delle chiavi (stringhe) o reindicizzare l'array se tutte le chiavi sono numeriche, utilizzare array_merge ():

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

uscite

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



Se si dispone di un array indicizzato numericamente in cui tutti i valori sono univoci (o non sono univoci ma si desidera rimuovere tutte le istanze di un valore particolare), è sufficiente utilizzare array_diff () per rimuovere un elemento corrispondente, come questo:

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

Per esempio:

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

Questo mostra quanto segue:

4
3

In questo esempio, l'elemento con il valore 'Charles' viene rimosso come può essere verificato dalle chiamate sizeof () che riportano una dimensione di 4 per l'array iniziale e 3 dopo la rimozione.


55
2017-07-31 01:06



Inoltre, per un elemento denominato:

unset($array["elementName"]);


48
2017-07-19 15:37



Distruggi un singolo elemento di un array

unset()

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

L'output sarà:

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

Se è necessario reind indicizzare la matrice:

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

Quindi l'output sarà:

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

Fai scoppiare l'elemento alla fine dell'array - restituisce il valore dell'elemento rimosso

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

L'output sarà

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

Rimuovi il primo elemento (rosso) da un array, - restituisce il valore dell'elemento rimosso

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

L'output sarà:

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

Produzione:

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

fruit1

22
2017-09-22 04:01



Per evitare di fare una ricerca si può giocare con array_diff:

$array = array(3, 9, 11, 20);
$array = array_diff($array, array(11) ); // removes 11

In questo caso non è necessario cercare / utilizzare la chiave.


20
2017-07-26 20:11