如何解决 PHP 错误“注意: 数组到字符串的转换...”

我有一个 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

这个错误意味着什么? 我如何修复它?

1221332 次浏览

当有许多名为 C[]的 HTML 输入时,在另一端的 POST 数组中得到的是 $_POST['C']中这些值的数组。所以当你打印 echo的时候,你要打印一个数组,它所做的就是打印 Array和一个通知。

要正确地打印一个数组,可以循环遍历它和每个元素 echo,也可以使用 print_r

或者,如果您不知道它是一个数组还是一个字符串或者其他什么,您可以使用 var_dump($var),它将告诉您它是什么类型以及它的内容是什么。仅用于调试目的。

在 HTML 中使用的是 <input name='C[]',这在发送表单时在 PHP 中创建了一个数组。

您正在使用 echo $_POST['C'];来回显该数组-这将不起作用,而是发出该通知和单词“ Array”。

根据您对其余代码所做的工作,您可能应该使用 echo $_POST['C'][0];

PHP 通知的含义以及如何复制:

如果您将一个 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
?>

更正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);    //prints 1, 2, 3
print join(',', $stuff);        //prints 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)
}

在最新版本的 php 7.x 中,Array to string conversion是错误的,而不是通知,并且阻止了进一步的代码执行。

使用 print,数组上的 echo不再是一个选项。

禁止错误和注意事项不是一个好的做法,特别是在开发环境和仍然在调试代码时。

使用 var_dumpprint_r迭代通过使用 foreachfor的输入值来输出声明为输入数组(‘ name[]’)的名称的输入数据

捕获错误的最常见做法是使用 try/catch块,这有助于防止代码执行中断,因为这可能导致包装在 try块中的错误。

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

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


}catch(Exception $e){


//handle the error message $e->getMessage();
}
<?php
ob_start();
var_dump($_POST['C']);
$result = ob_get_clean();
?>

如果要在变量中捕获结果

你也可以这样试试:

if(isset($_POST['G'])){
if(isset($_POST['C'])){
for($i=0; $i< count($_POST['C']); $i++){
echo $_POST['C'][$i];
}
}
}