搜尋

首頁  >  問答  >  主體

解決PHP錯誤:將陣列轉換為字串時的注意事項

<p>我有一個PHP文件,試圖輸出一個<code>$_POST</code>,但是我得到了一個錯誤,下面是代碼:</p> <pre class="brush:php;toolbar:false;">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>'</pre> <p>這裡是輸出POST的程式碼。 </p> <pre class="brush:php;toolbar:false;">if(!empty($_POST['G'])){ echo $_POST['C']; }</pre> <p>但是當程式碼運行時,我得到了一個錯誤,像這樣:</p> <pre class="brush:php;toolbar:false;">Notice: Array to string conversion in C:xampphtdocsPHISFinalSubmissionOfTheFormPHP.php on line 8</pre> <p>這個錯誤是什麼意思,我該如何修復它? </p>
P粉538462187P粉538462187533 天前614

全部回覆(2)我來回復

  • P粉986860950

    P粉9868609502023-08-22 09:46:05

    PHP Notice的意義及如何重現:

    #如果你將一個PHP數組傳遞給一個期望字串的函數,例如echoprint,那麼PHP解釋器會將你的陣列轉換為字面字串Array,拋出這個Notice並繼續執行。例如:

    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,然後將Notice記錄到stderr並繼續執行。

    另一個PHP腳本的範例:

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

    修正方法1:使用foreach迴圈存取陣列元素

    http://php.net/foreach

    $stuff = array(1,2,3);
    foreach ($stuff as $value) {
        echo $value, "\n";
    }

    輸出:

    1
    2
    3

    或包含陣列鍵名:

    $stuff = array('name' => 'Joe', 'email' => 'joe@example.com');
    foreach ($stuff as $key => $value) {
        echo "$key: $value\n";
    }

    輸出:

    name: Joe
    email: joe@example.com

    注意,陣列元素也可以是陣列。在這種情況下,可以再次使用foreach或使用陣列語法存取內部數組元素,例如$row['name']

    修正方法2:將陣列中的所有單元格連接在一起:

    如果只是一個普通的一維數組,可以使用分隔符號將所有單元格連接成一個字串:

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

    修正方法3:將複雜結構的陣列轉換為字串:

    如果你的陣列有複雜的結構,但仍需要將其轉換為字串,可以使用http://php.net/json_encode

    $stuff = array('name' => 'Joe', 'email' => 'joe@example.com');
    print json_encode($stuff);

    輸出:

    {"name":"Joe","email":"joe@example.com"}

    快速查看陣列結構:使用內建的php函數

    如果只是為了偵錯目的而檢查陣列內容,可以使用下列函數之一。請記住,var_dump是其中最詳細的,通常首選用於此目的

    #範例:

    $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)
    }

    回覆
    0
  • P粉739886290

    P粉7398862902023-08-22 00:07:45

    當你有很多命名為C[]的HTML輸入時,你在POST數組的另一端得到的是這些值的數組$_POST['C'] 。所以當你echo它時,你正在嘗試列印一個數組,所以它只會列印Array和一個提示。

    要正確列印一個數組,你可以循環遍歷它並echo每個元素,或者你可以使用print_r

    另外,如果你不知道它是一個陣列還是一個字串或其他什麼,你可以使用var_dump($var),它會告訴你它是什麼類型和它的內容是什麼。僅用於調試目的。

    回覆
    0
  • 取消回覆