PHPの配列

PHPの配列はハッシュだけでできているので、ふつーの数値インデックスの配列と違って、要素の削除が面倒だ。unsetで要素を削除すると、歯抜けの配列になってしまう。

<?php
//0 =>"foo", 1 =>"bar", 2 =>"hello", 3 =>"world"
$array = array("foo", "bar", "hello", "world");
unset($array[1]); ///1番目の要素"bar"を消す
var_dump($array);
?>

array (size=3)
0 => string 'foo' (length=3)
2 => string 'hello' (length=5)
3 => string 'world' (length=5)

番号0,2,3の歯抜け配列になってしまった。これをforループすれば、当然エラーになる。私のようなC++のvector, C#のListばっかり使っている人間には直感的にすぐに理解できないが、C#のDictionaryと挙動は同じだ。でも、数値が連続していることが前提でないと、プログラムを組みずらい。
いろいろ調べてみると、array_spliceを使えばいいらしい。

<?php
$array = array("foo", "bar", "hello", "world");
array_splice($array, 1, 1);//1番の要素から1つ分、つまり"bar"を消す
var_dump($array);
?>

array (size=3)
0 => string 'foo' (length=3)
1 => string 'hello' (length=5)
2 => string 'world' (length=5)

面倒じゃのう。何でもハッシュだと思ってやった方が楽かもしれないね。


コメントを残す

メールアドレスが公開されることはありません。