PHPで「Cannot use string offset as an array」が出たら確認したいポイントをまとめました。
このエラーは直訳すると
PHP Fatal error: Cannot use string offset as an array
PHP の致命的なエラー: オフセット配列として文字列を使用できません。
という事だそうです。
エラーとなる記述
エラーが発生するパターンを見てみます。
$hoge = "test";
var_dump($hoge);
var_dump($hoge[1]);
var_dump($hoge[1][0]);
これを実行すると
string(4) "test"
string(1) "e"
PHP Fatal error: Cannot use string offset as an array in ...
$hoge[1][0]でエラーが発生しました。
文字列を使用できないということなので「string」を多次元配列で指定すると発生します。
エラーの原因
「Cannot use string offset as an array」の通りですが、
$hoge[1] の時点で e という文字列に。
$hoge[1][0] は文字列 e のオフセット配列 0 を指定してしまっている結果に。
そりゃあ e は配列ではありませんのでエラーです。
たぶんきっとこういう意味なんでしょう。
エラーの対処法
まず、上記を踏まえて判別するかきちんと配列を格納するかで対処できそうです。
is_arrayで配列の判別
if( is_array( $hoge ) ){
echo "たしかにお前は配列です。";
}
これでエラーが出る配列は除去できますが、エラーが出る値を格納していることの問題は見て見ぬフリになってしまうかもしれません。
配列として初期化する
$hoge = array();
として配列として初期化することでオフセットでなく、配列だぞ!と教え込む方法も有効です。
まとめ
PHPというプログラムは型の意識が薄れるので、こういったエラーは付き物だと思って諦めるしかないのカモ。
いや、プログラミング中に「この変数はこの配列の値だから。。。」と考えている常識を捨てて「この変数はこの配列の値が本当に入るかわからない。よし判別しておこう。。。」という発想を常に持てばいいのカモ。
そうカモ。
でももっと上級者なら「これは変数なのか?これは配列か?値は想定の範囲か?俺は誰だ!どこに向かうんだ!」的な発想なのカモ。
今日も知識欲は止まらない。