PHPのエラー『Notice: Array to String Conversion』の解決方法

  • 作成日 2025.04.30
  • php
PHPのエラー『Notice: Array to String Conversion』の解決方法

PHPで配列を文字列として扱おうとすると、「Notice: Array to String Conversion」という警告が発生する。このエラーは、配列を文字列に変換できない状況で発生し、意図しない動作を引き起こす可能性がある。エラーの原因と解決方法を詳しく見ていく。

1. エラーの発生条件

「Array to String Conversion」エラーは、PHPが配列を文字列として扱おうとした場合に発生する。主な発生条件は以下の通り。

  • 配列を `echo` や `print` で出力しようとした場合
  • 配列を文字列結合 (`.`) しようとした場合
  • 配列を関数の引数として渡す際に文字列が期待される場合
  • HTMLの `value` 属性などに直接配列を渡した場合

2. エラーが発生するコード例

次のコードはエラーを引き起こす典型的な例。

<?php
$array = ['apple', 'banana', 'cherry'];
echo $array;
?>

実行すると、次のような警告が出る。

Notice: Array to string conversion in /path/to/script.php on line X
Array

3. 配列を出力する正しい方法

配列をそのまま `echo` で出力することはできない。配列の中身を確認したい場合は `print_r()` や `var_dump()` を使用する。

<?php
$array = ['apple', 'banana', 'cherry'];
print_r($array);
?>

出力結果:

Array
(
    [0] => apple
    [1] => banana
    [2] => cherry
)

4. 配列を文字列に変換する方法

配列を文字列として出力したい場合は `implode()` を使用する。

<?php
$array = ['apple', 'banana', 'cherry'];
echo implode(', ', $array);
?>

出力結果:

apple, banana, cherry

5. 文字列結合時のエラー回避

配列を文字列と結合しようとするとエラーになる。

<?php
$array = ['apple', 'banana'];
$message = "Fruits: " . $array; // エラー
?>

正しく結合するには `implode()` を使う。

<?php
$message = "Fruits: " . implode(', ', $array);
echo $message;
?>

出力結果:

Fruits: apple, banana

6. 配列を含むデータをログに出力する

`error_log()` に配列を渡すとエラーが発生するため、`json_encode()` を使う。

<?php
$array = ['apple', 'banana', 'cherry'];
error_log(json_encode($array));
?>

7. HTMLフォームの `value` に配列を渡した場合

フォームの `value` 属性に配列を直接渡すとエラーになる。

<input type="text" value="<?php echo $array; ?>">

これを防ぐには、`implode()` を使って文字列に変換する。

<input type="text" value="<?php echo htmlspecialchars(implode(', ', $array), ENT_QUOTES, 'UTF-8'); ?>">

8. JSON 形式で配列を扱う

配列を API に渡したり保存したりする場合、`json_encode()` を使う。

<?php
$array = ['apple', 'banana', 'cherry'];
$json = json_encode($array);
echo $json;
?>

出力結果:

["apple","banana","cherry"]

9. PHPの `join()` を活用する

`join()` は `implode()` のエイリアスなので、どちらを使ってもよい。

<?php
echo join(' | ', ['PHP', 'JavaScript', 'Python']);
?>

出力結果:

PHP | JavaScript | Python

10. 関数の引数として誤って配列を渡した場合

次のようなコードはエラーを引き起こす。

<?php
function sayHello($name) {
    return "Hello, " . $name;
}

echo sayHello(['John', 'Doe']); // エラー
?>

修正するには、配列を文字列に変換する。

<?php
echo sayHello(implode(' ', ['John', 'Doe']));
?>

11. SQLクエリのプレースホルダーに配列を渡す際の対策

データベースのクエリで `IN` 句を使用する場合、配列を直接渡すとエラーになる。

<?php
$ids = [1, 2, 3];
$sql = "SELECT * FROM users WHERE id IN (" . $ids . ")"; // エラー
?>

解決策として `implode()` を使用する。

<?php
$text = "Hello, world!";
$replace = ['Hello', 'Hi'];
echo str_replace($replace, 'Hey', $text); // エラー
?>

12. `str_replace()` に配列を渡す場合

`str_replace()` に誤って配列を渡すとエラーが発生する。

<?php
foreach ($replace as $word) {
    $text = str_replace($word, 'Hey', $text);
}
echo $text;
?>

修正するには、`foreach` ループを使う。

<?php
foreach ($replace as $word) {
    $text = str_replace($word, 'Hey', $text);
}
echo $text;
?>