BLOGTIMES
2012/03/18

php の「 Cannot use string offset as an array 」というエラー

  php  programming 
このエントリーをはてなブックマークに追加

php で PHP Fatal error: Cannot use string offset as an array という見慣れないエラーが出たのでちょっと調査。
これは PHP4 の時にはエラーになっていなくて、PHP5 からエラーになるようになった模様。

とりあえず一番短い実証コードは下記のような感じ。

stringoffset.php

<?php $str = "abcd"; var_dump($str); var_dump($str[1]); var_dump($str[1][0]);
$ php stringoffset.php string(4) "abcd" string(1) "b" PHP Fatal error: Cannot use string offset as an array in /tmp/test.php on line 5

これを実行すると、5行目でエラーが発生します。「phpでcannot use string offset as an arrayエラー - Neo Inspiration」でも触れられている通り、 String に対して3次元配列でアクセスしようとすると発生するエラーのようです。ちなみに $str[1] の var_dump() の結果は string(1) なので、string(1) だけ扱いが違うのかもと思って、下記のようなプログラムを作って検証してみました。

stringoffset2.php

<?php $str = "a"; var_dump($str); var_dump($str[0]);
$ php stringoffset2.php string(1) "a" string(1) "a"

こっちは通ってしまいました。 var_dump() の結果はどちらも string(1) ですが、内部的には扱いが違うということなのでしょうね。
とりあえず1つの array に string や array や int をごっちゃに格納しなければいいということですね。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/4838
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン