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
)

こうなる。

まあ確かに、配列とハッシュが同じで、配列向けの関数だから仕方ないのか。この仕様に気付かず延々はまってしまった。