2011-08-31 4 views
10

J'ai ce tableau sortie $ qui ressemble à ceci:PHP - dans un unset tableau multidimensionnel

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

et ainsi de suite ...

Quand je veux supprimer le deuxième élément que je viens d'utiliser

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

pour obtenir les éléments suivants:

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

Ma question est de savoir comment supprimer chaque deuxième élément de chaque élément du tableau ([0] [1], [1] [1], [2] [1], [3] [1], ...) obtenir les éléments suivants:

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) ne renvoie rien. –

Répondre

5

vous pouvez itérer sur le tableau, et unset() ce que vous voulez dans chaque sous-réseau:

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

Assurez-vous d'inclure le '&' comme arnaud a ci-dessus, cela est nécessaire pour le référencer lorsque vous appelez non configuré – sMyles

18

ne peut pas être fait avec une simple commande, mais vous pouvez utiliser une boucle:

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

Très utile, merci! Pour ajouter à votre réponse, si vous voulez garder vos clés restantes séquentielles après l'annulation, vous pouvez inclure à la fin de (et dans) votre 'foreach':' $ output [$ key] = array_values ​​($ output [$ key ]); Les 'array_values ​​()' vont rebaser les clés pour qu'elles soient séquentielles à partir de zéro. – Mike

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

Vous souhaitez utiliser une combinaison de array_map et array_splice:

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

Le problème avec unset est qu'il laissera les indices qu'ils étaient:

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

Alors que épissure mettra à jour les index:

$ 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

propre et soigné:

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

Propre et propre? comment ça? ... – Petah

+0

Vous donne envie de les gifler –

Questions connexes