2013年3月17日日曜日

配列について考える

今回は配列について考えます。
まずは配列についての基本的な知識から。

keyは整数 または 文字列です。 valueには任意の型を指定できます。

さらに、keyは指定される文字列によっては型キャストが発生します。
  • integer として妥当な形式の文字列は integer 型にキャストされます。
    つまり、キーに "8" を指定すると、実際には 8 として格納されるということです。
    一方 "08" はキャストされません。これは十進数として妥当な形式ではないからです。
  • floats もまた integer にキャストされます。
    つまり、 小数部分は切り捨てられるということです。
    たとえばキーに 8.7 を指定すると、実際には 8 として格納されます。
  • boolinteger にキャストされます。
    つまり、 キーに true を指定すると実際には 1 に格納され、
    同様にキーを false とすると実際には 0 となります。
  • Null は空文字列にキャストされます。
    つまり、キーに null を指定すると、実際には "" として格納されます。
  • arrayobject は、キーとして使えません。 キーとして使おうとすると Illegal offset type という警告が発生します。
サンプルコード 実行結果
array(1) {
  [1]=>
  string(1) "d"
}
上の例は、keyが全て1に型キャストされる例です。
keyが1にキャストされた結果、valueが上書かれて最終的にdになります。

では次に、PHP5.4以降で可能となった「関数やメソッドの返す結果を直接配列として扱える」という例をご紹介します。

サンプルコード 実行結果
array(5) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
}
array(5) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
}
と、このように関数の結果を一次変数に代入しなくても次の関数の引数に設定することができるようになりました。
今まで関数の結果を代入するだけだった変数が要らなくなったことは大きな進歩だと思います。

そしてPHP5.5以降では、配列リテラルをデリファレンスできるようになりました。
以下、マニュアルより抜粋したコードです。

サンプルコード 今回はここまでです。

0 件のコメント:

コメントを投稿