array_shiftではまった
array_shift() は、array の最初の値を取り出して返します。配列 array は、要素一つ分だけ短くなり、全ての要素は前にずれます。 数値添字の配列のキーはゼロから順に新たに振りなおされますが、 リテラルのキーはそのままになります。
PHP: array_shift - Manual
<?php $ary = array( '3' => 'bye!', 4 => 4, 'five' => 'five', '6' => '6', '7.0' => '7.0', 8.1 => 8.1, ); array_shift($ary); print_r($ary);
これが
Array ( [0] => 4 [five] => five [1] => 6 [7.0] => 7.0 [2] => 8.1 )
こうなる。
まあ確かに、配列とハッシュが同じで、配列向けの関数だから仕方ないのか。この仕様に気付かず延々はまってしまった。