PHPで配列のエラー「Cannot use string offset as an array」がでる場合の対処法

php-cannot
PHPで「Cannot use string offset as an array」が出たら確認したいポイントをまとめました。
このエラーは直訳すると

PHP Fatal error:  Cannot use string offset as an array
PHP の致命的なエラー: オフセット配列として文字列を使用できません。

という事だそうです。

SPONSORED LINK

エラーとなる記述

エラーが発生するパターンを見てみます。

$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というプログラムは型の意識が薄れるので、こういったエラーは付き物だと思って諦めるしかないのカモ

いや、プログラミング中に「この変数はこの配列の値だから。。。」と考えている常識を捨てて「この変数はこの配列の値が本当に入るかわからない。よし判別しておこう。。。」という発想を常に持てばいいのカモ。

そうカモ。

でももっと上級者なら「これは変数なのか?これは配列か?値は想定の範囲か?俺は誰だ!どこに向かうんだ!」的な発想なのカモ。

今日も知識欲は止まらない。

関連トピック

no-copy

ガラケーで画像やデコメを再配布不可など「ファイル制限あり」にする方法

ガラケーで画像の転送不可設定をする方法についてのまとめです。 コピー制限・保存制限・画面メモ制限・キャプチャ制限などの対策と方法です。

xml_error

PHPエラー対処方法「simplexml_load_file」&「simplexml_load_string」

PHP simplexml_load_fileを使用して「I/O warning : failed to load external e

Database

MySQLでTAG機能としてタグ付けを実装するデータベース設計を考える

ブログなどでも「タグ機能」って便利ですよね。カテゴライズとはまた違うタグ機能をMySQLを使って設計する時に、どのように実装するかを検討

Way

JavaScriptでUA判別してスマホとタブレットを振り分ける方法

JavaScriptを使用してUAでiPhoneやAndroidのスマホを判定したり、増加傾向にあるタブレットを判別する方法メモ。 U

php_Missing_argument

PHPエラー対処方法「 Warning: Missing argument 1 for」

PHPにおけるPHP Warning: Missing argument 1 for... というエラーの原因と対処方法メモです。

php_timestamp

PHPでタイムスタンプを変換して日付を表示する

PHPでタイムスタンプへの変換とタイムスタンプからの変換メモです。 データベースの日付型からの出力などで使ったり、xmlやRSSでの日

Text

PHPエラー対処方法「RSSをXML取得時に不正文字が存在する場合」

PHPでRSSをsimplexml_load_stringなどを使って解析する場合に不正な文字が含まれている時に発生するエラー対処方法の

sjis_utf_mbnk

文字コードが違う!SJISのページをUTF-8に変更したらクエリ付URLが死んだ話

ガラケーサイトからスマホやPC向けサイトへとサイトを拡大する場合、 SJISだった文字コードを「この際だからUTF-8に一括で変更して

公開日:2014/06/13