9

我想我可能无法正确理解 array_splice 应该如何工作。我的理解是,第一个参数是您的初始数组,第二个参数是要开始的元素,第三个参数是长度或要删除/替换的元素数量。

所以,我有这个数组(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 ) )

我想完全删除第二个元素(索引为 1 的数组;TypeFlag = C 等)我不想用任何东西替换它;只是返回包含剩余两个元素的数组。我试过这个(其中购物车是数组名称):

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

但我最终得到的是在执行 print_r 时:

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

所以它似乎正在删除 0 和 2,并留下 1 作为余数。我究竟做错了什么?

4

5 回答 5

16

array_splice返回一个由提取的元素组成的数组。

你正在做:

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

因此,您正在提取第二个元素(索引 1)并将结果分配回$cart,覆盖您的原始数组。

要完全删除第二个元素,请不要将返回值分配array_splice$cart. 所以就这样做:

array_splice($cart, 1,1);

这是有效的,因为数组是通过引用传递给函数的。

此外,如果您想从数组中删除单个元素,则可以更高效、更清洁地使用unset

unset($cart[1]);
于 2010-09-27T15:15:02.290 回答
5

array_splice 返回“删除/替换”元素,然后您将其分配以覆盖正确拼接的 $cart

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

或者干脆

array_splice($cart, 1,1);
于 2010-09-27T15:14:36.767 回答
3

使用 unset() 的唯一问题是它不会更新索引。

IE

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

数组( [0] => 一 [1] => 二 [2] => 三 [3] => 四)

unset($arr[2]);

print_r($arr);

数组( [0] => 一 [1] => 二 [3] => 四)

而 array_splice 将重新索引数组

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

数组( [0] => 一 [1] => 二 [2] => 四)

于 2015-01-14T02:40:45.980 回答
3

你为什么不使用 unset-ie

unset(nameofyourarray[indextoremove]);

http://php.net/manual/en/function.unset.php

于 2010-09-27T15:27:29.570 回答
2

只需使用 unset():

unset($cart[1]);
于 2010-09-27T15:27:38.467 回答