0

クラスの配列メンバーにアイテムを追加するメソッドがクラスにあります。配列メンバーが空の場合(ただし、以前はインデックス1とインデックス2に2つのアイテムが含まれていました)、メソッドを呼び出すと、アイテムはインデックス2に挿入されます。これはなぜですか。誰かがすぐにわからない場合は、私はもっと多くの詳細を提供することができます。

4

2 に答える 2

3

私があなたの質問を正しく理解していれば、あなたはこの状況にいます:

最初に次のような配列があります。

$data = array(
    1 => 'abcd',
    2 => 'efg',
);
var_dump($data);

すべての要素の設定を解除します:

unset($data[1], $data[2]);
var_dump($data);

そして、次のようなデータを挿入すると:

$data[] = 'glop';
var_dump($data);

インデックス 0 ではなく 2 (実際には、インデックス 3 に配置されているようです。最後の既存のインデックスに 1 を加えたもの) であり、最終的にこの配列が得られます。

array(1) {
  [3]=>
  string(4) "glop"
}

それがあなたの言いたいことなら、この動作はarray のドキュメントで説明されています:

前述のように、キーが指定されていない場合、既存の整数インデックスの最大値が取得され、新しいキーはその最大値に 1 を加えた値になります。整数インデックスがまだ存在しない場合、キーは 0 (ゼロ) になります。

これに使用される最大整数キーは、現在配列に存在している必要はないことに注意してください。配列が最後に再インデックスされてから、ある時点で配列に存在していればよいだけです。

(そして例があります)

質問を正しく理解できたことを願っています(そうでなければ、コード、実際の出力、および期待する出力の例を提供できますか?)、これが役立つことを願っています:-)

于 2009-07-22T04:21:07.890 に答える
0

配列が空でよろしいですか? あなたならprint_r($obj->memberArray)、わかりArray()ますか?の値はcount($obj->memberArray)?

また、キーは意味がありますか? $obj->memberArray = array_keys($obj->memberArray)そうでない場合、配列が空であることが予想される場合は、安全に実行してキーをリセットできるはずです。私は、PHP が混合 (一部の数値、一部の文字列) インデックスを持つ配列を処理するときに奇妙なことを行い、その場合、最後の数値インデックスの後に追加してインデックスの予約を開始する可能性があるという予感があります。ただの予感、これをテストしていません。

于 2009-07-22T00:00:55.523 に答える