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

パンDKOTORI 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さん

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

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