スタッフブログ
satoです。
PHPは、昨日のほとんどが組み込み関数によって実装されているため、各関数の命名規則はprefix等で統一されていることが多いです。
しかし、中には命名規則が一致してないのに似たような挙動をするものがあったり、一致しているのに微妙に挙動が違うものがあります。今回はsatoが気になった例を紹介します。
・array_pop/array_shift
配列の最後の値を取り出すarray_popと、配列の最初の値を取り出すarray_shiftですが、若干挙動が違います。
array_popはそのままなのですが、array_shiftは
他にも似たような例は存在すると思うので、気になる場合は必ずPHPマニュアルを参照するようにしましょう。
PHPは、昨日のほとんどが組み込み関数によって実装されているため、各関数の命名規則はprefix等で統一されていることが多いです。
しかし、中には命名規則が一致してないのに似たような挙動をするものがあったり、一致しているのに微妙に挙動が違うものがあります。今回はsatoが気になった例を紹介します。
・array_pop/array_shift
配列の最後の値を取り出すarray_popと、配列の最初の値を取り出すarray_shiftですが、若干挙動が違います。
array_popはそのままなのですが、array_shiftは
array_shift() は、array の最初の値を取り出して返します。配列 array は、要素一つ分だけ短くなり、全ての要素は前にずれます。 数値添字の配列のキーはゼロから順に新たに振りなおされますが、 リテラルのキーはそのままになります。とあります。 つまり、
PHP: array_shift - Manual
array(100=>'a', 110=>'b', 120=>'c');という配列があった場合、array_popの結果は
array(100=>'a', 110=>'b');ですが、array_shiftは
array(0=>'b', 1=>'c');となってしまいます。 array_popと対象の動作を行いたい場合は、array_sliceの$preserve_keysをTRUEにして動作させるとうまく行きます。ただしPHP5専用なので、PHP4では他の方法で行う必要があります。
他にも似たような例は存在すると思うので、気になる場合は必ずPHPマニュアルを参照するようにしましょう。