2012年02月24日
array_unshiftの罠
久しぶりにarray_unshiftではまっていました。
というか、仕様をわすれてどうしようもない感じでした^^
えっと、やりたかったこととしては配列のキーをDBのテーブルのIDにしてvalueに項目を入れる配列を作ってました。
<?php
$areas = array(
4 => '静岡',
3 => '清水',
8 => '沼津',
);
上記のような配列に対して後から要素を後からキーが「0」で、要素が「未開の地、藤枝」みたいな項目を配列の先頭にいれたいという感じです。
で、普通にarray_unshiftすればいいやとおもって以下のように下記ました。
array_unshift($areas, '幻の大地、藤枝');
var_dump($areas);
そしてダンプしてみたら以下のような結果が…
array(4) {
[0]=>
string(21) "幻の大地、藤枝"
[1]=>
string(6) "静岡"
[2]=>
string(6) "清水"
[3]=>
string(6) "沼津"
}
これが噂に名高い藤枝の呪いなのか…みたいな事は全くありません。
普通にarray_unshiftしているからですね。
普通の人なら分かりますよね。僕は馬鹿だからてっきり呪いかと^^
つまりキーの値を保持したいときはarray_unshift使ってはだめですね。ごめんなさい。
なんで結局以下のように書くしかないのかなぁーと。
$_areas = array(
4 => '静岡',
3 => '清水',
8 => '沼津',
);
$areas = array('幻の大地、藤枝');
$areas += $_areas;
まあ後から追加してksortすればええがなとか、いろいろあるんですが、今回はちょっとksort避けたかったんで上記のようにかきましたとさ。
突っ込みどころ満載だとおもうので突っ込んでいただけるとうれしいです^^