如何解决PHP错误“注意:数组在…中转换为字符串”


116

我有一个试图回显a的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]不是吗?
阿马尔·穆拉利

请显示var_dump($Texting)
Barmar

1
嗨...第8行表示回显$ _POST ['C']。并且var_dump($ _ POST ['C'])是Arrayarray(3){[0] =>字符串(1)“ A” [1] =>字符串(4)“男性” [2] =>字符串(6) “女性”}。并且var_dump($ Texting)是array(3){[0] =>字符串(1)“ A” [1] =>字符串(4)“ Male” [2] =>字符串(6)“ Female”}。 ..
t4thilina

Answers:


110

当您有许多HTML输入名为C[]您在另一端的POST数组中获得的内容时,便是这些值的数组$_POST['C']。因此,当您这样做时echo,您将尝试打印一个数组,因此它所做的就是打印Array并发出通知。

要正确打印数组,您可以遍历数组和echo每个元素,也可以使用print_r

另外,如果您不知道它是数组,字符串还是其他东西,则可以使用var_dump($var)它将告诉您它是什么类型以及它的内容是什么。只能将其用于调试目的。


K非常感谢您的明确解释。它打印出您所说的确切内容。这意味着我的数组已经发送到PHP文件。看来我可以毫无问题地使用。再次感谢。
t4thilina

56

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

您有2个选择,或者使用数组到字符串的转换器将PHP数组转换为String,或者取消显示PHP通知。

更正1:使用内置的php函数print_r或var_dump:

http://php.net/manual/en/function.print-r.phphttp://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”}]
安德鲁(Andrew)

5

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

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

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


2

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

printecho对数组是不再一个选项。

抑制错误和通知不是一个好习惯,尤其是在开发环境中并且仍在调试代码时。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.