9

array_spliceがどのように機能するのか正しく理解できないかもしれません。私の理解では、最初のパラメータは最初の配列であり、2番目のパラメータは開始する要素であり、3番目のパラメータは削除/置換する要素の長さまたは数です。

だから、私はこの配列(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 ) )

2番目の要素(インデックスが1の配列、TypeFlag = Cなど)を完全に削除したいのですが、何にも置き換えたくありません。残りの2つの要素を含む配列を返すだけです。私はこれを試しました(カートは配列名です):

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

したがって、2番目の要素(インデックス1)を抽出し、結果をに割り当てて$cart、元の配列を上書きします。

array_splice2番目の要素を完全に削除するには、 backの戻り値をに割り当てないでください$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(nameofyourarray[indextoremove]);

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

于 2010-09-27T15:27:29.570 に答える
3

unset()を使用する場合の唯一の問題は、インデックスが更新されないことです。

すなわち

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

配列([0] => 1 [1] => 2 [2] => 3 [3] => 4)

unset($arr[2]);

print_r($arr);

配列([0] => 1 [1] => 2 [3] => 4)

一方、array_spliceは配列のインデックスを再作成します

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

配列([0] => 1 [1] => 2 [2] => 4)

于 2015-01-14T02:40:45.980 に答える
2

unset()を使用するだけです:

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