LoginSignup
6
4

More than 5 years have passed since last update.

PHPで配列の要素をunsetしてもインデックスは詰まらない

Last updated at Posted at 2017-02-08

何が起きたか

$array = range(1,5);
var_dump($array); // #1
unset($array[0]);
unset($array[1]);
unset($array[2]);
unset($array[3]);
unset($array[4]);
var_dump($array); // #2
// #1
array(5) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
}
// #2
array(0) {
}

ここまでは期待どおりかもしれない。

ここで、空になった配列に要素を追加してみる。念のためreset関数で配列の内部ポインタを先頭にする。

// 先ほどのコードに下記のコードを追記
reset($array);
$array[] = 1;
$array[] = 2;
var_dump($array); // #3

なんと、reset関数で内部ポインタを先頭(=0)に戻したつもりでしたが、実際には、内部ポインタは要素をunsetする前の末尾の4になっていたようです。
(なので新たに要素を追加すると、5から始まる)

// #3
array(2) {
  [5]=>
  int(1)
  [6]=>
  int(2)
}

unsetで配列の要素を削除しているライブラリ(e.g. Doctrine ArrayCollection)

DoctrineArrayCollectionunsetを使って配列の要素を削除しています。

public function remove($key)
{
    if (isset($this->_elements[$key])) {
        $removed = $this->_elements[$key];
        unset($this->_elements[$key]);

        return $removed;
    }

    return null;
}

配列から要素を削除して、インデックスを詰める方法

配列から要素を削除して、インデックスを詰める方法は下記のとおりです。

詳しくは、下記の参考URLを参照ください。

参考

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4