Per rimuovere un elemento da un array PHP tramite la sua chiave, usa unset($array[$key]). L'elemento sparisce, le altre chiavi restano esattamente com'erano, e fare unset di una chiave che non esiste non è un errore.
Guarda il secondo risultato: le chiavi ora sono 0, 2, 3. unset non rinumera mai.
Reindicizzare l'array dopo unset
Una lista con un buco nelle chiavi crea problemi più avanti: un ciclo for ($i = 0; ...) incontra l'indice mancante, e json_encode scrive un oggetto JSON invece di un array. array_values() ti ridà chiavi pulite.
Rimuovere per posizione con array_splice
array_splice($array, $offset, $length) rimuove $length elementi a partire dalla posizione $offset, rinumera le chiavi e restituisce ciò che ha rimosso. Un offset negativo conta dalla fine. Nella stessa chiamata può anche inserire elementi sostitutivi.
array_splice lavora sulle posizioni, non sulle chiavi: su un array associativo rimuove in base al posto nell'ordine e mantiene le chiavi stringa. La pagina su array_slice lo confronta con array_slice, che copia una parte senza modificare l'originale.
Rimuovere un elemento per valore
array_diff($array, [$value]) restituisce l'array senza ogni elemento uguale a $value, mantenendo le chiavi degli altri. Per rimuovere solo la prima corrispondenza, trova la sua chiave con array_search e fai unset.
array_diff confronta i valori come stringhe, quindi array_diff([1, "1", 2], [1]) rimuove sia l'intero sia la stringa. Quando la condizione è più di "uguale a questo valore", usa array_filter con una callback.
Rimuovere il primo o l'ultimo elemento
array_shift() rimuove il primo elemento e array_pop() l'ultimo. Entrambe restituiscono l'elemento rimosso, il che le rende comode per code e pile.
array_shift rinumera le chiavi numeriche da 0. array_pop non ne ha bisogno, perché il buco è alla fine.
Rimuovere più chiavi insieme
unset accetta più elementi in una sola chiamata. Per rimuovere una lista di chiavi che hai in un array, invertila con array_flip() così i nomi diventano chiavi, poi passala ad array_diff_key().
Errore comune: unset con array_search quando il valore manca
array_search restituisce false quando non trova nulla, e false usato come chiave di array diventa 0. Quindi questa riga elimina il primo elemento ogni volta che il valore non è nell'array:
Salva sempre il risultato di array_search e confrontalo con !== false prima di usarlo come chiave. Neanche un semplice if ($key) basta: anche una corrispondenza all'indice 0 è falsy.
Domande frequenti
Come rimuovo un elemento da un array per valore in PHP?
Per rimuovere ogni occorrenza, usa array_diff($arr, ['value']). Per rimuovere solo la prima, trova la sua chiave e fai unset, verificando che sia stata trovata: $k = array_search('value', $arr); if ($k !== false) { unset($arr[$k]); }.
Come reindicizzo un array dopo unset?
Racchiudilo in array_values(): $arr = array_values($arr); rinumera le chiavi da 0. In alternativa rimuovi l'elemento con array_splice($arr, $index, 1), che rinumera per te.
Come rimuovo il primo o l'ultimo elemento di un array?
array_shift($arr) rimuove e restituisce il primo elemento e rinumera le chiavi numeriche. array_pop($arr) rimuove e restituisce l'ultimo elemento.
Posso fare unset di un elemento dentro un ciclo foreach?
Sì. foreach ($arr as $k => $v) { if ($v < 0) { unset($arr[$k]); } } è sicuro, perché foreach scorre una copia dell'array mentre tu modifichi l'originale. Le chiavi mantengono i loro buchi, quindi chiama array_values() dopo se ti serve una lista.
unset su una chiave mancante causa un errore?
No. unset($arr['missing']) non fa nulla e non genera warning, quindi non serve verificare prima con isset.