PHPエラーを解決する方法 '通知:配列から文字列への変換…


116

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

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

このエラーの意味と修正方法を教えてください。


どちらが8行目ですか?ある$Texting[i]タイプミスは?$Texting[$i]代わりにすべきではないですか?
Amal Murali 2013年

見せてくださいvar_dump($Texting)
Barmar 2013年

1
こんにちは...行8は、$ _ POST ['C']をエコーすることを意味します。そしてvar_dump($ _ POST ['C'])はArrayarray(3){[0] => string(1) "A" [1] => string(4) "Male" [2] => string(6) 「女性」}。そしてvar_dump($ Texting)はarray(3){[0] => string(1) "A" [1] => string(4) "Male" [2] => string(6) "女性"}です。 ..
t4thilina 2013年

回答:


110

C[]反対側のPOST配列で取得した名前のHTML入力が多数ある場合、これらの値の配列はにあります$_POST['C']。つまり、そのときはecho、配列を出力しようとしているので、実行するのは出力とArray通知だけです。

配列を適切に印刷するには、配列とecho各要素をループするか、を使用しますprint_r

または、それが配列なのか文字列なのかわからない場合は、これを使用しvar_dump($var)て、型と内容を知ることができます。デバッグ目的でのみ使用してください。


K明確な説明をありがとうございました。それはあなたが正確に言ったことを印刷します。これは、私の配列がすでにPHPファイルに送信されていることを意味します。問題なく使用できるようです。もう一度ありがとう。
t4thilina 2013年

56

PHP通知の意味とその再現方法:

echoまたはのような文字列が必要な関数にPHP配列を送信するとprint、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にダンプし、Notderをstderrに記録して続行します。

PHPスクリプトの別の例:

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

2つのオプションがあります。配列から文字列へのコンバーターを使用してPHP配列を文字列にキャストするか、PHP通知を抑制します。

修正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.

これは受け入れられる答えになるはずです。非常に助けてくれました。この回答ではjson_encodeも使用する必要がありました。print_r(json_encode($ AuthData)); 次のような結果:[{"system_id": "61a694d0-3605-4502-952b-38d87b451a56"、 "system_auth_id": "caa5906f-d9ae-4297-8e9f-5ea8d9ed8b51"、 "system_lastauth_id": "ace681bb-48f5-4831- a23d-6608c696f264 "、" system_rundate ":" 2019-04-27T22:46:07.090Z "}]
アンドリュー

5

<input name='C[]'HTMLで使用しています。これにより、フォームの送信時にPHPで配列が作成されます。

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

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


2

Array to string conversion 最新バージョンのphp 7.xでは、通知ではなくエラーであり、それ以上コードを実行できなくなります。

配列でを使用することはprintechoもはやオプションではありません。

エラーや通知を抑制することは、特に開発環境でコードをデバッグしている場合は、良い習慣ではありません。

入力配列として宣言されている名前( ' ')の名前の入力データを出力するにvar_dumpprint_rforeachまたは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();
  }

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.