PHPで echo したときに「Warning: Array to string conversion in …」と表示されることがあります。これは配列を文字列として扱おうとしたときに出る警告です。この記事では、エラーの正体とよくある原因、そして用途に応じた正しい対処方法を解説します。
この記事の結論:このエラーは配列をそのまま文字列にしようとしたときの警告です。中身を確認したいなら
print_r()、1行に連結したいなら implode()、構造ごと出すなら json_encode() を使います。多くは多次元配列や誤ったインデックス指定が原因です。エラーの正体
これは致命的エラーではなく警告(Warning)です。処理自体は止まらず続きますが、配列の部分は文字列 「Array」 に変換されて出力されます。
配列を文字列にしようとすると
<?php $array = [1, 2, 3]; echo "The array is: " . $array; // Warning: Array to string conversion ... // 出力: The array is: Array ← 中身ではなく "Array" になる
ダブルクォート内に配列を埋め込んだ場合("$array")も同様に発生します。
よくある原因:ネスト配列とインデックスの取り違え
実務で多いのは、取り出したつもりの値がまだ配列だったケースです。DBの取得結果やフォーム送信値(チェックボックスなど)で起こりがちです。
実際によくあるパターン
<?php // 例1: DBの行をそのまま出力(本当は列を指定すべき) $row = ["id" => 1, "name" => "佐藤"]; echo $row; // Warning(echo $row["name"]; が正しい) // 例2: 多次元配列の階層を取り違える $users = [["name" => "佐藤"], ["name" => "鈴木"]]; echo $users[0]; // Warning(echo $users[0]["name"]; が正しい) // 例3: チェックボックスなど配列で送られる $_POST // <input type="checkbox" name="tags[]"> → $_POST["tags"] は配列 echo $_POST["tags"]; // Warning(implode や foreach で処理する)
まず「その変数は本当に文字列か?」を確認しましょう。
var_dump($x) で型を見れば、配列なのか文字列なのかすぐ分かります。配列だった場合は、正しいキー($x["name"] など)まで掘り下げているか見直します。用途別の対処方法
中身を確認したい:print_r / var_dump
デバッグで中身を見たいだけなら print_r() や var_dump() を使います。
print_r / var_dump
<?php $array = [1, 2, 3]; print_r($array); // 構造を見やすく表示 var_dump($array); // 型と値を詳しく表示
1行の文字列にしたい:implode
配列を区切り文字でつないで1つの文字列にするなら implode() です。
implodeで連結
<?php
$array = [1, 2, 3];
echo "The array is: " . implode(", ", $array); // The array is: 1, 2, 3
implode() は多次元配列には使えません。要素自体が配列だと、その部分はやはり「Array」になり警告が出ます(例: implode(",", [[1,2],[3,4]]) → Array,Array)。入れ子のデータは json_encode() か、ネストした foreach で処理します。構造ごと文字列化したい:json_encode
多次元配列をログや確認用にそのまま文字列化したいときは json_encode() が便利です。
json_encodeで構造化して出力
<?php
$data = [["name" => "佐藤"], ["name" => "鈴木"]];
echo json_encode($data, JSON_UNESCAPED_UNICODE);
// [{"name":"佐藤"},{"name":"鈴木"}]
要素を1つずつ処理したい:foreach
foreachで個別処理
<?php
$array = [1, 2, 3];
foreach ($array as $value) {
echo "Value: " . $value . "\n";
}
よくある質問(FAQ)
Qこのエラーが出てもプログラムは止まりますか?
A止まりません。これはWarning(警告)なので処理は続きます。ただし配列部分は文字列「Array」になってしまうため、表示や保存が意図どおりになりません。早めに直しましょう。
Q原因の見つけ方が分かりません。
A警告に出ている行番号の変数を
var_dump() で確認してください。その変数が配列なら、正しいキーまで掘り下げているか($row["name"] など)を見直します。DBの行やチェックボックスの $_POST でよく起こります。Qimplodeを使ったのにまだ警告が出ます。
A配列が多次元(入れ子)になっている可能性があります。
implode() は要素が配列だと処理できません。入れ子のデータは json_encode() か、ネストした foreach で扱ってください。Q配列を見やすく確認したいだけです。
A
print_r($array) または var_dump($array) を使います。print_r は構造を、var_dump は型と値を詳しく表示します。まとめ
「Array to string conversion」への対処を整理します。
- 配列を文字列にしようとしたときの警告(配列は「Array」になる)
- 多くは多次元配列・インデックスの取り違えが原因 →
var_dumpで型確認 - 確認は
print_r/var_dump - 連結は
implode(ネスト不可)、構造化はjson_encode - 要素ごとの処理は
foreach
関連として、配列を文字列に変換する方法・JSONを利用する方法・文字列結合のテクニックもあわせて読むと、PHPの配列・文字列処理に強くなれます。

