スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PHPー「Error: Illegal string offset」が出たが、原因は意外なところに

PHP5.5.3を使ってプログラミングしていると、「Error: Illegal string offset 'bango'」というエラーが出ました。該当個所を見ると、

if ($rec["bango"] === 1) {
// code here
}

という感じの記述です。早速「Error: Illegal string offset」で検索をかけると、多くのサイトがヒットし(例えばこちら)、原因はPHP5.4で仕様が変わったため、解決策は


if (isset($rec["bango"])) {
if ($rec["bango"] === 1) {
// code here
}
}

と書くべしとあります。これを書くとエラーこそ出なくなったものの、期待通りの動きではありません。つまり外側のif文の条件式はfalseになっているようです。

その前後のコードを見ると、

$data = getData();
foreach ($data as $datJson) {
$rec = json_decode($datJson);
if ($rec["bango"] === 1) {
// code here
}
}

function getData() {
$ret = array();
while (条件) {
$rec["bango"] = ...;
$rec["name"] = ...;
array_push($ret, json_encode($rec));
}
return $ret;
}

となっていました。原因は、json_decode文の個所。正しくはjson_decode($datJson, TRUE);と書くのが正しい。

$data = getData();
foreach ($data as $datJson) {
$rec = json_decode($datJson, TRUE);
if ($rec["bango"] === 1) {
// code here
}
}

マニュアルには、



とあります。json_decodeは、パラメータ$assoc=TRUEの場合に連想配列を返し、デフォルトはFALSEとのこと。

もし、json_decode($datJson);と書くなら、$rec->bangoでアクセスすればよい。

結構ハマりました。反省を込めての備忘録です。

スポンサーサイト

テーマ: プログラミング | ジャンル: コンピュータ

Oracleのselect for updateにはwait時間の設定ができる | Home | Sencha ExtJSーGridで選択した行のデータを取得する書き方

コメント

コメントの投稿


非公開コメント

このページのトップへ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。