Cách giải quyết lỗi PHP 'Thông báo: Chuyển đổi mảng thành chuỗi trong…'


116

Tôi có một tệp PHP cố gắng lặp lại a $_POSTvà tôi gặp lỗi, đây là mã:

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>'

Đây là mã để lặp lại BÀI ĐĂNG.

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

Nhưng khi mã chạy, tôi gặp lỗi như:

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

Lỗi này có nghĩa là gì và làm cách nào để khắc phục?


Cái nào là dòng 8? Là $Texting[i]một lỗi chính tả? Đó không phải là $Texting[$i]thay thế?
Amal Murali

Xin vui lòng hiển thị var_dump($Texting).
Barmar

1
Xin chào ... Dòng 8 có nghĩa là, echo $ _POST ['C']. Và var_dump ($ _ POST ['C']) là Mảng (3) {[0] => string (1) "A" [1] => string (4) "Nam" [2] => string (6) "Giống cái" }. Và var_dump ($ Texting) là mảng (3) {[0] => string (1) "A" [1] => string (4) "Male" [2] => string (6) "Female"}. ..
t4thilina

Câu trả lời:


110

Khi bạn có nhiều đầu vào HTML được đặt tên, C[]những gì bạn nhận được trong mảng ĐĂNG ở đầu kia là một mảng các giá trị này trong $_POST['C']. Vì vậy, khi bạn echođó, bạn đang cố gắng in một mảng, vì vậy tất cả những gì nó làm là in Arrayvà thông báo.

Để in đúng một mảng, bạn có thể lặp qua nó và echotừng phần tử hoặc bạn có thể sử dụng print_r.

Ngoài ra, nếu bạn không biết đó là một mảng hay một chuỗi hoặc bất cứ thứ gì, bạn có thể sử dụng var_dump($var)nó sẽ cho bạn biết nó là loại gì và nội dung của nó là gì. Chỉ sử dụng nó cho mục đích gỡ lỗi.


K cảm ơn bạn rất nhiều vì bạn đã giải thích rõ ràng. Nó in ra chính xác những gì bạn đã nói. Nó có nghĩa là mảng của tôi đã được gửi đến tệp PHP. Có vẻ như tôi có thể sử dụng mà không có vấn đề gì. Thankz một lần nữa.
t4thilina 16/1113

56

Thông báo PHP có nghĩa là gì và cách tạo lại nó:

Nếu bạn gửi một mảng PHP vào một hàm mong đợi một chuỗi như: echohoặc print, thì trình thông dịch PHP sẽ chuyển đổi mảng của bạn thành chuỗi ký tự Array, hãy ném Thông báo này và tiếp tục. Ví dụ:

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

Trong trường hợp này, hàm kết printxuất chuỗi ký tự:Array sang stdout và sau đó ghi lại Thông báo vào stderr và tiếp tục.

Một ví dụ khác trong tập lệnh PHP:

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

Bạn có 2 tùy chọn, hoặc truyền mảng PHP của bạn sang Chuỗi bằng cách sử dụng trình chuyển đổi mảng sang chuỗi hoặc loại bỏ Thông báo PHP.

Sửa lỗi 1: sử dụng hàm php nội trang print_r hoặc var_dump:

http://php.net/manual/en/ Chức năng.print-r.php hoặc http://php.net/manual/en/ Chức năng.var-dump.php

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

Bản in:

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

Cách sửa 2: Sử dụng json_encode để thu gọn mảng thành chuỗi json:

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

Sửa 3: Nối tất cả các ô trong mảng với nhau:

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

Chỉnh sửa 4: ngăn chặn Thông báo:

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

Đây phải là câu trả lời được chấp nhận. Đã giúp tôi vô cùng. Tôi cũng đã phải sử dụng json_encode với câu trả lời này. print_r (json_encode ($ AuthData)); Kết quả tương tự như sau: [{"system_id": "61a694d0-3605-4502-952b-38d87b451a56", "system_auth_id": "caa5906f-d9ae-4297-8e9f-5ea8d9ed8b51", "system_lastauth_id": "ace5681bb-48 a23d-6608c696f264 "," system_rundate ":" 2019-04-27T22: 46: 07.090Z "}]
Andrew

5

Bạn đang sử dụng <input name='C[]'trong HTML của mình. Điều này tạo ra một mảng trong PHP khi biểu mẫu được gửi.

Bạn đang sử dụng echo $_POST['C']; để lặp lại mảng đó - điều này sẽ không hoạt động, nhưng thay vào đó phát ra thông báo đó và từ "Mảng".

Tùy thuộc vào những gì bạn đã làm với phần còn lại của mã, bạn có thể nên sử dụng echo $_POST['C'][0];


2

Array to string conversion trong các phiên bản mới nhất của php 7.x là lỗi, thay vì thông báo và ngăn việc thực thi mã thêm.

Sử dụng print, echotrên mảng không phải là một tùy chọn nữa.

Loại bỏ các lỗi và thông báo không phải là một thực tiễn tốt, đặc biệt là khi ở trong môi trường phát triển và vẫn đang gỡ lỗi mã.

Sử dụng var_dump, print_rlặp qua giá trị đầu vào bằng cách sử dụng foreachhoặc forđể xuất dữ liệu đầu vào cho các tên được khai báo dưới dạng mảng đầu vào (' name[]')

Phương pháp phổ biến nhất để bắt lỗi là sử dụng try/catchcác khối, điều này giúp chúng tôi ngăn chặn việc gián đoạn thực thi mã có thể gây ra các lỗi có thể xảy ra trong trykhối.

  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();
  }

1
<?php
ob_start();
var_dump($_POST['C']);
$result = ob_get_clean();
?>

nếu bạn muốn nắm bắt kết quả trong một biến

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.