2011-08-31 28 views
10

tengo esta $ salida del conjunto que se parece a esto:PHP - desarmado en una matriz multidimensional

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í sucesivamente ...

Cuando quiero retirar el segundo elemento sólo tiene que utilizar

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

obtener la 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 de la matriz ([0] [1], [1] [1], [2] [1], [3] [1], ...) para obtener la siguiente:

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 
    ) 
) 
+0

[unset()] (http://es.php.net/unset) no devuelve nada. –

Respuesta

5

usted puede iterar sobre la matriz, y unset() lo que quiere en cada sub-serie:

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

Asegúrate de incluir el 'y' como arnaud arriba, esto es necesario para hacer referencia cuando llames al – sMyles

18

no se puede hacer con un simple comando, pero se puede utilizar un bucle:

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

¡Muy útil, gracias! Para agregar a su respuesta, si desea mantener las claves restantes secuenciales después del desarmado, puede incluir al final (y dentro de) su 'foreach':' $ output [$ key] = array_values ​​($ output [$ key ]); '. El 'array_values ​​()' volverá a establecer la base de las claves para que sean secuenciales comenzando desde cero. – Mike

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

que tendría que utilizar 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 va a dejar a los índices como lo fueron:

$ 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 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) 
    } 
} 
1

limpia y ordenada:

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

limpio y ordenado? ¿cómo es eso? ... – Petah

+0

Hace que quieras e-slap 'em –

Cuestiones relacionadas