【PHPエラー】Warning: foreach() argument must be of type array|objectの解決方法
PHPでプログラムを作っていると突然表示されるエラー文章。突然エラーが表示されると焦ってしまいますよね。
今回の記事ではPHPエラーの中でもWarning: foreach() argument must be of type array|object
について、原因から実際の具体例、その解決方法まで順を追って詳しく解説したいと思います。
この記事の目次を表示
Warning: foreach() argument must be of type array|objectとは
まずは実際にWarning: foreach() argument must be of type array|object
がどのように表示されるのか見てみましょう。
このエラーは以下の画像のように表示されます。

Warning: foreach() argument must be of type array|object, ●● given in ▲▲ on line ■■
このエラーが表示される原因はforeach文の引数が配列やオブジェクトではなく、数値、文字列だった場合に発生するエラーです。
- ●●・・・間違って指定しているforeach文の引数の型
- ▲▲・・・間違った型が指定している「ディレクトリ名/ファイル名」
- ■■・・・エラーの原因となる処理が書かれている行数
つまり、「▲▲ファイルの■■行目でforeach文に配列やオブジェクトではない、●●型の値が指定されていている個所があるよ」ということを教えてくれています。
Warning: foreach() argument must be of type array|objectが起こる具体例
”foreach文に配列やオブジェクトではない値を指定している”と書きましたが、具体的にどういうことなのか、実際にこのWarning: foreach() argument must be of type array|object
が発生するコードを交えてご紹介します。
<?php
$data = "【PHPエラー】Warning: foreach() argument must be of type array|objectの解決方法";
foreach ($data as $key => $value) {
echo $data;
}
?>
$data
は数値を格納した変数なのでforeach文の引数とすることは出来ません。変数をforeach文の引数に指定している為、Warning: foreach() argument must be of type array|object, string given in
が表示されます。
上の例では変数の中身は文字列なので、エラーはstring given in
となり、これが数値だった場合は、in given in
となります。
Warning: foreach() argument must be of type array|objectの解決方法
それではこのエラーを解消する・回避する方法をご紹介します。
foreach文を使用しない
サンプルコードのように変数の中身を出力したいだけであればforeach文を使用する必要はありません。
以下のように直接$data
を出力することでWarning: foreach() argument must be of type array|object
を回避することが出来ます。
<?php
$data = "【PHPエラー】Warning: foreach() argument must be of type array|objectの解決方法";
echo $data;
?>
変数の中身を配列化する
foreach文は配列またはオブジェクトで無ければ引数として指定することは出来ません。
そのため、どうしてもforeach文を使用したい場合は変数を値を配列化してあげる必要があります。
具体的には以下のようなコードで変数を配列化します。
<?php
$data = "【PHPエラー】Warning: foreach() argument must be of type array|objectの解決方法";
$data = mb_str_split($data);
foreach ($data as $key => $value) {
echo $value;
}
// var_dump( $data );
// array(69) { [0]=> string(3) "【" [1]=> string(1) "P" [2]=> string(1) "H" [3]=> string(1) "P" [4]=> string(3) "エ" [5]=> string(3) "ラ" [6]=> string(3) "ー" [7]=> string(3) "】" [8]=> string(1) "W" [9]=> string(1) "a" [10]=> string(1) "r" [11]=> string(1) "n" [12]=> string(1) "i" [13]=> string(1) "n" [14]=> string(1) "g" [15]=> string(1) ":" [16]=> string(1) " " [17]=> string(1) "f" [18]=> string(1) "o" [19]=> string(1) "r" [20]=> string(1) "e" [21]=> string(1) "a" [22]=> string(1) "c" [23]=> string(1) "h" [24]=> string(1) "(" [25]=> string(1) ")" [26]=> string(1) " " [27]=> string(1) "a" [28]=> string(1) "r" [29]=> string(1) "g" [30]=> string(1) "u" [31]=> string(1) "m" [32]=> string(1) "e" [33]=> string(1) "n" [34]=> string(1) "t" [35]=> string(1) " " [36]=> string(1) "m" [37]=> string(1) "u" [38]=> string(1) "s" [39]=> string(1) "t" [40]=> string(1) " " [41]=> string(1) "b" [42]=> string(1) "e" [43]=> string(1) " " [44]=> string(1) "o" [45]=> string(1) "f" [46]=> string(1) " " [47]=> string(1) "t" [48]=> string(1) "y" [49]=> string(1) "p" [50]=> string(1) "e" [51]=> string(1) " " [52]=> string(1) "a" [53]=> string(1) "r" [54]=> string(1) "r" [55]=> string(1) "a" [56]=> string(1) "y" [57]=> string(1) "|" [58]=> string(1) "o" [59]=> string(1) "b" [60]=> string(1) "j" [61]=> string(1) "e" [62]=> string(1) "c" [63]=> string(1) "t" [64]=> string(3) "の" [65]=> string(3) "解" [66]=> string(3) "決" [67]=> string(3) "方" [68]=> string(3) "法" }
?>
このようにすることでforeach文を使用して値を出力することが出来ます。
ただし、このmb_str_split()
関数はPHP7.4.0以降のバージョンから使用することが出来ます。
まとめ
いかがでしたか?
プログラミングをしていると思わぬエラーに出くわすことがただあります。
そんな時はブラウザに表示されるエラー内容をよく確認し、エラーを解消しましょう。