六帖のかたすみ

DVを受けていた男性。家を脱出して二周目の人生を生きています。自閉症スペクトラム(受動型)です。http://rokujo.org/ に引っ越しました。

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)

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