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

时间:2013-11-16 10:38:36

标签: php html

我有一个试图回显$_POST的PHP文件,我收到错误,这是代码:

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

这个错误是什么意思,我该如何解决?

5 个答案:

答案 0 :(得分:85)

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

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

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

答案 1 :(得分:41)

PHP通知的含义以及如何重现它:

如果将PHP数组发送到需要类似:<a href="javascript:void(0)" class="zen-trigger" aria-haspopup="true" id="globalHeaderCommunitySwitcher" title="Press space bar or Enter key to open" data-uidsfdc="51"><b class="zen-selectArrow"></b>PVT GBI Internal</a> <b class="zen-selectArrow"></b> "PVT GBI Internal" echo的字符串的函数中,那么PHP解释器会将您的数组转换为文字字符串print,抛出此注意并继续。例如:

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转储到stdout,然后将通知记录到stderr并继续运行。

PHP脚本中的另一个示例:

Array

你有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

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

打印:

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

更正2:使用json_encode将数组折叠为json字符串:

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

更正3:将阵列中的所有单元连接在一起:

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

更正4:禁止通知:

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

答案 2 :(得分:5)

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

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

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

答案 3 :(得分:0)

最新版本的php 7.x中的

Array to string conversion是错误的,而不是引起注意的,并且会阻止进一步的代码执行。

在数组上使用printecho不再是一种选择。

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

使用var_dumpprint_r,使用foreachfor遍历输入值来输出声明为输入数组的名称的输入数据('{{1} }')

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

try

答案 4 :(得分:0)

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

如果您想将结果捕获到变量中