2010-09-27 3 views
8

Je pense que je ne comprends pas correctement comment array_splice est censé fonctionner. Ma compréhension est que le premier param est votre tableau initial, le second param est l'élément à partir de, et le troisième param est la longueur, ou le nombre d'éléments à supprimer/remplacer.Comment puis-je supprimer un seul membre de tableau en utilisant array_splice dans php?

Donc, j'ai ce tableau (sortie print_r):

Array ( 
[0] => Array ([TypeFlag] => S [qty] => 1 [denom] => 25 [certMessage] => [totalPrice] => 25) 
[1] => Array ([TypeFlag] => C [qty] => 2 [denom] => 25 [certMessage] => [totalPrice] => 50) 
[2] => Array ([TypeFlag] => V [qty] => 2 [denom] => 25 [certMessage] => test [totalPrice] => 50)) 

Je veux supprimer complètement le deuxième élément (le tableau avec un indice de 1; typeflag = C, etc.) Je ne veux pas le remplacer par n'importe quoi; juste pour retourner le tableau avec les deux autres éléments. J'ai essayé ce (où panier est le nom du tableau):

$cart = array_splice($cart, 1,1); 

Mais ce que je finis avec est quand faire un print_r:

Array ([0] => Array ([TypeFlag] => C [qty] => 2 [denom] => 25 [certMessage] => [totalPrice] => 50)) 

Il semble donc être enlever 0 et 2 et en laissant 1 comme le reste. Qu'est-ce que je fais mal?

Répondre

14

array_splice retourne un tableau composé de éléments extraits.

Vous faites:

$cart = array_splice($cart, 1,1); 

Vous extrayez 2ème élément (index 1) et assignez le résultat à $cart, écraser votre tableau original.

Pour supprimer complètement le 2ème élément, n'attribuez pas la valeur de retour de array_splice à $cart. Donc, il suffit de faire:

array_splice($cart, 1,1); 

Cela fonctionne parce que le tableau est passé par référence à la fonction.

Aussi, si vous souhaitez supprimer un seul élément du tableau ses plus efficaces et plus propres à utiliser unset comme:

unset($cart[1]); 
+1

Donc, si je suis faire cela à l'intérieur d'une fonction et avoir besoin de retourner le tableau moins la valeur choisie, dois-je d'abord affecter $ cart à une valeur temporaire (c.-à-d. $ cartTemp = $ cart), puis faites le splice, puis réaffectez le tableau à $ cart? Ou est-ce que je fais juste array_splice ($ cart, 1, 1), puis retourne $ cart? NE JAMAIS L'ESPRIT - juste essayé et cela fonctionne si je fais juste array_splice et puis retourne $ cart. Merci. – EmmyS

+1

Non. Il n'est pas nécessaire de l'affecter à une temp. Appelez simplement la fonction, en passant le tableau et la fonction va changer le tableau. – codaddict

+0

unset a besoin de tableaux indexés, si le tableau n'a pas d'index, les unset les ajoute par lui-même et si vous voulez votre collection sans index, cela gâche tout. – CookieMonster

5

array_splice renvoie les « enlevés/remplacés » éléments, que vous êtes alors assignant pour remplacer le panier $ épissé correctement

$discard = array_splice($cart, 1,1); 

ou simplement

array_splice($cart, 1,1); 
2

Il suffit d'utiliser unset():

unset($cart[1]); 
3

Le seul problème avec l'utilisation de unset() est qu'il ne met pas à jour les index.

c.-à-d.

$arr = array('one', 'two', 'three', 'four'); 
print_r($arr); 

Tableau ( [0] => une [1] => deux [2] => trois [3] => quatre )

unset($arr[2]); 

print_r($arr); 

Tableau ( [0] => une [1] => deux [3] => quatre )

alors que array_splice ré-indexer le tableau

$arr = array('one', 'two', 'three', 'four'); 
array_splice($arr,2,1); 
print_r($arr); 

Tableau ( [0] => un [1] => deux [2] => quatre )

Questions connexes