如何在php中使用array_splice删除单个数组成员?

如何在php中使用array_splice删除单个数组成员?,php,arrays,array-splice,Php,Arrays,Array Splice,我想我可能没有正确理解阵列拼接应该如何工作。我的理解是,第一个参数是您的初始数组,第二个参数是要开始的元素,第三个参数是要删除/替换的元素的长度或数量 因此,我有这个数组(打印输出): 我想完全删除第二个元素(索引为1的数组;TypeFlag=C,等等),我不想用任何东西替换它;仅返回包含其余两个元素的数组。我尝试过这个(其中cart是数组名): 但我最后得到的是在打印时: Array ( [0] => Array ( [TypeFlag] => C [qty] => 2 [d

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

因此,我有这个数组(打印输出):

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

但我最后得到的是在打印时:

Array ( [0] => Array ( [TypeFlag] => C [qty] => 2 [denom] => 25 [certMessage] => [totalPrice] => 50 ) ) 
因此,它似乎删除了0和2,剩下1作为余数。我做错了什么?

array\u splice返回“removed/replaced”元素,然后分配这些元素以覆盖正确拼接的$cart

$discard = array_splice($cart, 1,1);
或者干脆

array_splice($cart, 1,1);

array\u splice
返回由提取的元素组成的数组

你正在做:

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

要完全删除第二个元素,请不要将
数组拼接的返回值分配回
$cart
。所以,只要做:

array_splice($cart, 1,1);
这是因为数组是通过引用传递给函数的

另外,如果要从数组中删除单个元素,则使用
unset
作为更高效、更干净的方法:

unset($cart[1]);

你为什么不使用unset-即

unset(nameofyourarray[indextoremove]);
只需使用unset():


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

i、 e

排列 ( [0]=>一个 [1] =>两个 [2] =>三个 [3] =>四个 )

排列 ( [0]=>一个 [1] =>两个 [3] =>四个 )

而数组_拼接将重新索引数组

$arr = array('one', 'two', 'three', 'four');
array_splice($arr,2,1);
print_r($arr);
排列 ( [0]=>一个 [1] =>两个 [2] =>四个
)

因此,如果我在函数中执行此操作,并且需要返回数组减去所选值,是否需要首先将$cart分配给临时值(即$cartemp=$cart),然后进行拼接,然后将数组重新分配给$cart?或者我只是做数组拼接($cart,1,1),然后返回$cart?没关系-只是尝试了一下,如果我只做数组拼接,然后返回$cart,它就会工作。谢谢,不用了。无需将其分配给临时值。只需调用函数,将数组传递给它,函数就会更改数组。unset需要索引数组,如果数组没有索引,unset会自行添加索引,如果您希望集合没有索引,则会把一切都搞糟。。
unset(nameofyourarray[indextoremove]);
unset($cart[1]);
$arr = array('one', 'two', 'three', 'four');
print_r($arr);
unset($arr[2]);

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