web-dev-qa-db-ja.com

の解き方 PHP エラーの「注意:配列から文字列への変換...」

$_POSTをエコーし​​ようとするPHPファイルがあり、エラーになります。コードは次のとおりです。

echo "<html>";
echo "<body>";
for($i=0; $i<5;$i++){
    echo "<input name='C[]' value='$Texting[$i]' " . 
         "style='background-color:#D0A9F5;'></input>";

}
echo "</body>";
echo "</html>";
echo '<input type="submit" value="Save The Table" name="G"></input>'

これはPOSTをエコーするコードです。

if(!empty($_POST['G'])){
    echo $_POST['C'];
}

しかし、コードを実行すると、次のようなエラーが発生します。

Notice: Array to string conversion in 
C:\xampp\htdocs\PHIS\FinalSubmissionOfTheFormPHP.php on line 8

このエラーはどういう意味ですか、どうすれば修正できますか?

85
t4thilina

C[]という名前のHTML入力がたくさんある場合、反対側のPOST配列に入ってくるのは、$_POST['C']内のこれらの値の配列です。そのため、echoとすると、配列を印刷しようとしているので、print Arrayとその通知だけが行われます。

配列を正しく表示するには、配列をループ処理して各要素をechoするか、print_rを使用します。

代わりに、それが配列なのか文字列なのかわからないのなら、var_dump($var)を使うことができます。デバッグ目的でのみ使用してください。

84
jadkik94

PHP Noticeの意味と再現方法:

PHP配列を、echoprintのような文字列を期待する関数に送ると、PHPインタプリタはあなたの配列をリテラル文字列Arrayに変換します。行きます。例えば:

php> print(array(1,2,3))

PHP Notice:  Array to string conversion in 
/usr/local/lib/python2.7/dist-packages/phpsh/phpsh.php(591) :
eval()'d code on line 1
Array

この場合、関数printはリテラル文字列Arrayをstdoutにダンプしてから、通知をstderrに記録して続行します。

PHPスクリプトの別の例:

<?php
    $stuff = array(1,2,3);
    print $stuff;  //PHP Notice:  Array to string conversion in yourfile on line 3
?>

2つの選択肢があります。文字列変換ツールへの配列を使用してPHP配列をStringにキャストするか、PHP Noticeを抑制します。

訂正1:組み込みphp関数print_rまたはvar_dumpを使用してください。

http://php.net/manual/en/function.print-r.php または http://php.net/manual/en/function.var-dump.php

$stuff = array(1,2,3);
print_r($stuff);
$stuff = array(3,4,5);
var_dump($stuff);

プリント:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
array(3) {
  [0]=>
  int(3)
  [1]=>
  int(4)
  [2]=>
  int(5)
}

訂正2:json_encodeを使用して配列をjson文字列に縮小します。

$stuff = array(1,2,3);
print json_encode($stuff);   //Prints [1,2,3]

修正3:配列内のすべてのセルを結合する

<?php
    $stuff = array(1,2,3);
    print implode(", ", $stuff);    //prints 1, 2, 3
    print join(',', $stuff);        //prints 1, 2, 3
?>

訂正4:通知を抑制します。

error_reporting(0);
print(array(1,2,3));    //Prints 'Array' without a Notice.
40
Eric Leschinski

HTMLで<input name='C[]'を使っています。これにより、フォームが送信されたときにPHPに配列が作成されます。

その配列をエコーするためにecho $_POST['C'];を使用しています - これは機能しませんが、その代わりにその注意とWordの「配列」を発行します。

残りのコードで何をしたかに応じて、おそらくecho $_POST['C'][0];を使用する必要があります。

5
Sven

最新バージョンのphp 7.xのArray to string conversionは、気付かずにエラーであり、それ以上コードが実行されるのを防ぎます。

printを使用して、arrayでechoを使用することはできなくなりました。

特に開発環境でコードをデバッグしているときは、エラーや通知を抑制することはお勧めできません。

var_dumpprint_rを使用し、foreachまたはforを使用して入力値を反復処理し、入力配列として宣言されている名前の入力データを出力します( 'name[]')

エラーをキャッチするための最も一般的な方法はtry/catchブロックを使用することです。これは、tryブロック内にラップされる可能性のあるエラーを引き起こす可能性があるコード実行の中断を防ぐのに役立ちます。

  try{  //wrap around possible cause of error or notice

    if(!empty($_POST['G'])){
        echo $_POST['C'];
    }

  }catch(Exception $e){

    //handle the error message $e->getMessage();
  }
0
niklaz