制作会社から制作会社じゃない会社に転職が決まりました。 制作会社で学んだことを残らず記事にしたいと思います。

パンD KOTORI Blogの公式キャラクター「パンD」です。
コーディングPHP「Invalid argument supplied for foreach() …」エラーの対処法

「Invalid argument supplied for foreach() …」エラーの対処法

2014年12月19日PHP 
「Invalid argument supplied for foreach() …」エラーの対処法記事のアイキャッチ画像

型が配列じゃない変数でforeachを実行した時にでる「Invalid argument supplied for foreach() …」エラーの対処法を紹介します。

まえがき

みなさんphpのforeach文でこんなエラー出たことないですか?

Warning: Invalid argument supplied for foreach() in ファイルのパス

foreachエラー

KoToRiはマジで良くこのエラーだしちゃうんですよね。
その度にGoogleで検索して修正してってのをかれこれ10回くらい繰り返しているので、いい加減記事にして同じ過ちは2度と繰り返さないように対処方法を心に刻みつけたいと思います。

「Invalid argument supplied for foreach() …」エラーの原因

「Invalid argument supplied for foreach() …」エラーの原因は配列の形式ではない変数でforeach文を実行しようとしているからです。

基本に返ってforeachの解説を見てみましょう。

foreach は、配列を反復処理するための便利な方法です。 foreach が使えるのは配列とオブジェクトだけであり、 別のデータ型や初期化前の変数に対して使うとエラーになります。 この構造には二種類の構文があります。

引用元:http://php.net/manual/ja/control-structures.foreach.php

もろに
foreach が使えるのは配列とオブジェクトだけであり
って書いてあるやんw

これで原因は明確に分かったと思います。

次の項で「Invalid argument supplied for foreach() …」エラーを解決していきましょう。

「Invalid argument supplied for foreach() …」エラーの対処法

めちゃくちゃ簡単です。

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

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

上のコードを下記のように書き換えます。

foreach ((array)$arr as $value) {
  // hogehoge.
}

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

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

まとめ

すごい簡単なハズなのに、何故か直ぐ忘れて1か月後とかに同じ状況になって「あれ~どうやるんだっけな~」ってなってGoogle先生に聞く。
この無限ループからようやく抜け出せそうです。
これからforeach使うときは最初から「(array)」付けちゃおうと思います。

参考サイト

PHPのforeach文でnullチェックなしでエラー回避

ありがとうございます。

シェアする みんなシェアしてね

フォローする フォローする

いつもKOTORI Blogをご覧いただきありがとうございます。Facebook、Twitterを通じて、皆様と交流していき色んな情報を共有していければな~と思ってます。お気軽に登録してください!

基本フォロー返します。

RSSを登録する

RSSはこちらから。

follow us in feedly

Feedly使ってる人はこちらから。

Buy me a Beer

動く!パンDのLINEスタンプ
好きな人にアプローチスタンプ
パンDのLINEスタンプ

関連する記事 関連する記事も読んでみてね

コメント

  • magicalsally

    はじめまして。

    教材を使って勉強しており、PHP初心者です。。

    エラー解決にこちらの記事が大変参考になり、ブログに掲載させていただきました!
    http://magicalsally.net/invalid-argument-supplied-for-foreach/
    ありがとうございました!

    他の記事も見させていただき勉強させて下さい。更新楽しみにしています^^

    • kotoriblog

      magicalsallyさん

      はじめまして。コメントありがとうございます^^
      ブログにリンク張っていただき光栄です!

      最近更新できていないですが、お互い勉強頑張りましょう!