vaciar resetear remover item eliminar destruir borrar array php multidimensional-array unset

resetear - unset position array php



PHP-desarmado en una matriz multidimensional (5)

Tengo este array $ output que se ve así:

Array( [0] => Array( [0] => 1a [1] => 1b [2] => 1c ) [1] => Array( [0] => 2a [1] => 2b [2] => 2c ) [2] => Array( [0] => 3a [1] => 3b [2] => 3c ) [3] => Array( [0] => 4a [1] => 4b [2] => 4c ) )

y así...

Cuando quiero eliminar el segundo elemento, solo uso

$output = unset($output[1]);

para obtener lo siguiente:

Array( [0] => Array( [0] => 1a [1] => 1b [2] => 1c ) [1] => Array( [0] => 3a [1] => 3b [2] => 3c ) [2] => Array( [0] => 4a [1] => 4b [2] => 4c ) )

Mi pregunta es cómo eliminar cada segundo elemento de cada elemento en la matriz ([0] [1], [1] [1], [2] [1], [3] [1], ...) para obtener el seguimiento:

Array( [0] => Array( [0] => 1a [1] => 1c ) [1] => Array( [0] => 2a [1] => 2c ) [2] => Array( [0] => 3a [1] => 3c ) [3] => Array( [0] => 4a [1] => 4c ) )


Limpio y aseado:

$f=function(&$a,$k) { unset $a[1]; }; array_walk($arr,$f);


No se puede hacer con un comando simple, pero puede usar un ciclo:

foreach(array_keys($output) as $key) { unset($output[$key][1]); }


Puede iterar sobre la matriz y unset() lo que desea en cada sub-matriz:

foreach($output as &$item) { unset($item[2]); } unset($item); // unset reference


Utilizarías una combinación de array_map y array_splice :

function removeSecond( array &$arr ) { array_splice( $arr, 1, 1 ); } $out = array_map( ''removeSecond'', $input );

El problema con unset es que dejará los índices como estaban:

$ php -r ''$arr = array(array(0,1,2)); unset($arr[0][1]); var_dump($arr);'' array(1) { [0]=> array(2) { [0]=> int(0) [2]=> int(2) } }

Mientras el empalme actualizará los índices:

$ php -r ''$arr = array(array(0,1,2)); array_splice($arr[0], 1, 1); var_dump($arr);'' array(1) { [0]=> array(2) { [0]=> int(0) [1]=> int(2) } }


foreach($array as $key=>$val){ unset($val[1]); }