foreach()文のエラーへの対処法を初心者にもわかるようにまとめてみた

便利な世の中になったもので、わからないことに出会った時には、ググれば問題解決ができます。

しかし、専門的な知識が必要なものとなれば、書かれていることの意味がわからないために、手に入れた「解決策」が役に立たないこともあります。

特に、phpとかのファイルを修正しなければならない問題については、初心者には手を出したくても出せない壁があります。

もちろん、オンライン上で見つけた「解決策」に問題があるのではなく、痒いところに手が届かないというか、言葉が足りないために初心者にとって???な内容になっているのです。

そこで、まったくの初心者であるわたしが、備忘録的にそれこそ「痒いところに手が届いた」書き方になるよう心がけエラー対処法をまとめました。

なお、タイトルにあるエラーがどういう意味で、何が原因で生じているかなど無視して話をすすめます。

とにかく、エラーが出なくなりゃいいんだというわけです。

はじまり

いま話題のAMP(Accelerated Mobile Pages)の「実装」を試みてみました。

とは言っても、AMPというプラグインとAccelerated Mobile Pagesといういうプラグインをインストールしただけですが、それだけで簡単にAMPの実装ができてしまいます。

AMPを実装するとページの表示速度が速くなり、イライラしなくてすみます。

もちろん、使えなくなる機能が出るということですが、問題ではありません。

サクサク読めた方がストレスがたまりません。

で、次の画像が実装した直後の画像です。

喜びもつかの間、最初のページを開いてみるとエラーが表示されていました。

そこで、解決すべくインターネットサーフィンをするわけですが、解決策らしきものは見つかるものの、心得のないものにとっては???なわけです。

次に載せているのはわたしが最終的にたどり着いた「解決策」です。

「Invalid argument supplied for foreach() …」エラーの対処法
めちゃくちゃ簡単です。

普通のforeach文はこんな感じですよね。

1 foreach ($arr as $value) {
2  // hogehoge.
3 }

上のコードを下記のように書き換えます。
1 foreach ((array)$arr as $value) {
2      // hogehoge.
3   }

「(array)$arr」で$arrを強制的に配列の形にすることで「Invalid argument supplied for foreach() …」エラーを回避することができます。

参照 KOTORI

スポンサーリンク

使い勝手の良いテキストエディターが必要な理由

まずは使い勝手の良いテキストエディターを手に入れることがプログラムに手を加える作業を楽にします。

macbookなどには「テキストエディット」というテキストエディターが最初から入っていますが、それでは不便です。

「オススメ テキストエディター」でググればたくさん出てきます。

わたしが使っているものはCotEditor(無料)です。

とにかく無駄な機能がついていなく、軽いのでオススメです。

わたしが最初に目にしたエラーメッセージは、上の画像でも確認できますが、次のようになっていました。

(スマホの画面の一番上に表示されているやつです。)

Warning: Invalid argument supplied for foreach() in /home/*****/ietore.com/public_html/wp-content/plugins/amp/includes/sanitizers/class-amp-img-sanitizer.php on line 61

「/」以下(太字部分)を見ればエラーを起こしている箇所がどこの何というファイルの何行目かわかります。

ちなみに、わたしはエックスサーバーを使っているので、確認作業はエックスサーバーのインフォパネルを開きファイルマネージャーにログインして行います。

では実際にclass-amp-img-sanitizer.php というファイルの61行目をエディターで確認してみましょう。

まずは付属の「テキストエディット」で開きます。

行番号が表示されていないので、61行目を探すのが大変です。

ところが、CotEditorだと次のようになり、一発で61行目を確認することができるようになります

これが、わたしが専用のテキストエディターをオススメする理由です。

初心者はここがわからない

エラー箇所(61行目): foreach($need_dimensions[$url] as $node){・・・・・
修正の仕方    : foreach((array)$arr as $value) {・・・・・

「ここまでわかって何がわからないの?」と言われそうですが、初心者にはこれがわからないわけです。

「$arr」なんかどこにもないじゃないかとなるわけです。

で、よく見比べると、ほとんど違いはなく

$need_dimensions[$url](実際の記述)

$arr(修正例)

となっていることに気づきます。

これは何かの変数を表していて、変数の名前の付け方はプログラムによって違ってくる・・・、つまり変数の前に

(array)

を付け加えればOkということがわかります。

でも、初心者にはこれがわからないんです。

勇気を出して書き換えてみた

phpの書き換えは、ブログが開けなくなることがあるので注意と覚悟が必要です。

で、次のように書き換えてみました。

書き換えたらいよいよスマホのブラウザをシークレットモードにして確認です。

で、改めて「KOTORI」を読み直してみると・・・・

foreachで回す変数の前に「(array)」を付けるだけなので簡単ですね。

参照 KOTORI

ちゃんと書かれていました。

これがわからなかったんですヨ。

スポンサーリンク

シェアする