Si desea eliminar un elemento de una matriz en una posición específica, se puede obtener la clave para esa posición y luego desasignarla:
$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]);
Esto funciona con cualquier matriz PHP, sin tener en cuenta donde comienza la indexación o si se usan cadenas para las claves.
Si desea volver a numerar la matriz restante sólo tiene que utilizar array_values
:
$b = array_values($b);
que le dará un arreglo indexado numéricamente de base cero.
Si la matriz original es un arreglo indexado numéricamente de base cero, así (como en su pregunta), puede omitir la parte sobre la obtención de la clave:
$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 directamente utilice array_splice
que se ocupa de compensaciones en lugar de teclas y re-índices del array (teclas numéricas en la entrada no se conservan):
$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);
posible duplicado de [eliminar la línea de matriz por clave] (http: // stackoverflow .com/questions/1782041/remove-line-from-array-by-key) – hakre