如何解决PHP错误'注意:数组到string转换在…'
我有一个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
这个错误是什么意思,我该如何解决?
当你有许多名为C[]
HTMLinput时,你在POST数组中获得的是$_POST['C']
的这些值的数组。 所以,当你echo
时候,你正在试图打印一个数组,所以它只是打印Array
和通知。
要正确打印一个数组,你可以循环遍历它并echo
每个元素,或者你可以使用print_r
。
另外,如果你不知道它是一个数组还是一个string或者其他什么,你可以使用var_dump($var)
来告诉你它是什么types的,它的内容是什么。 仅用于debugging目的。
如何重现以上提示:
当您将一个裸露的数组发送到如下函数时会发生此消息: echo
或print
:
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
在这种情况下,echo和print只会将Array
打印到标准输出,然后将通知logging到标准错误。
更明确地说,你可以在php脚本中做到这一点:
创build一个PHP数组,并尝试将这个裸数组打印到stdout:
<?php $stuff = array(1,2,3); print $stuff; //PHP Notice: Array to string conversion in yourfile on line 3 ?>
更正1:使用内build的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将数组折叠为jsonstring:
$stuff = array(1,2,3); print json_encode($stuff); //Prints [1,2,3]
更正3:一起连接arrays中的所有单元格:
<?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.
为什么发生这种情况?
如果你检查打印和回声的PHP文档,
http://php.net/manual/en/function.print.php
http://php.net/manual/en/function.echo.php
你会看到两个string,而不是数组。 你将一个数组作为一个string传递,一般来说当你犯这样的错误时,PHP将无所事事,或者做一些非常意外的事情。
您在HTML中使用<input name='C[]'
。 这将在PHP中发送表单时创build一个数组。
你正在使用echo $_POST['C'];
来回应该数组 – 这不起作用,而是发出该通知和单词“数组”。
取决于你对代码的其他部分做了什么,你应该使用echo $_POST['C'][0];