Se si desidera rimuovere un elemento da un array in una posizione specifica, è possibile ottenere la chiave per quella posizione e poi non impostato:
$b = array(123,456,789,123);
$p = 2;
$a = array_keys($b);
if ($p < 0 || $p >= count($a))
{
throw new RuntimeException(sprintf('Position %d does not exists.', $p));
}
$k = $a[$p-1];
unset($b[$k]);
Questo funziona con qualsiasi array PHP, a prescindere dove inizia l'indicizzazione o se le stringhe vengono utilizzate per le chiavi.
Se si desidera rinumerare la matrice restante basta usare array_values
:
$b = array_values($b);
che vi darà una a base zero, array indicizzato numericamente.
Se la matrice originale è un a base zero, array indicizzato numericamente così (come nella tua domanda), è possibile saltare la parte su come ottenere la chiave:
$b = array(123,456,789,123);
$p = 2;
if ($p < 0 || $p >= count($b))
{
throw new RuntimeException(sprintf('Position %d does not exists.', $p));
}
unset($b[$p-1]);
$b = array_values($b);
O direttamente utilizzare array_splice
che si occupa di offset invece di chiavi e re-indici della matrice (tasti numerici in ingresso non vengono mantenute):
$b = array(123,456,789,123);
$p = 2;
if ($p < 0 || $p >= count($b))
{
throw new RuntimeException(sprintf('Position %d does not exists.', $p));
}
array_splice($b, $p-1, 1);
possibile duplicato del [rimuovi linea da array chiave] (http: // StackOverflow .com/questions/1782041/remove-line-from-array-by-key) – hakre