'注意:数组到字符串的转换......”错误

'Notice: Array to string conversion in...' error

提问人:t4thilina 提问时间:11/16/2013 最后编辑:Your Common Senset4thilina 更新时间:11/12/2023 访问量:1366602

问:

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

此错误是什么意思,如何解决?

PHP 数组

评论

0赞 Amal Murali 11/16/2013
哪一个是第 8 行?是错别字吗?难道不应该这样吗?$Texting[i]$Texting[$i]
0赞 Barmar 11/16/2013
请出示 .var_dump($Texting)
1赞 t4thilina 11/16/2013
你好。。。第 8 行表示,echo $_POST['C']。而 var_dump($_POST['C']) 是 Arrayarray(3) { [0]=> string(1) “A” [1]=> string(4) “Male” [2]=> string(6) “Female” }。而 var_dump($Texting) 是 array(3) { [0]=> string(1) “A” [1]=> string(4) “Male” [2]=> string(6) “Female” } ...
0赞 outis 11/9/2021
"“Bobby Tables”XKCD 漫画中的 SQL 注入是如何工作的?“,”如何防止 PHP 中的 SQL 注入?"
1赞 mickmackusa 4/21/2023
相关: 如何在 PHP 中回显或打印数组?

答:

160赞 jadkik94 11/16/2013 #1

该错误表示您正在尝试使用数组,就好像它是字符串一样。

例如

$var = [42];
echo "The Answer to the Ultimate Question of Life is $var"; 

将导致此错误。为了避免这种情况,您必须处理特定的数组项,例如

echo "The Answer to the Ultimate Question of Life is $var[0]"; 

嵌套数组也是如此。当您有许多 HTML 输入时,您在另一端的 POST 数组中得到的是 中这些值的数组。所以当你这样做时,你正在尝试打印一个数组,所以它所做的只是打印和通知。C[]$_POST['C']echoArray

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

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

7赞 Sven 11/16/2013 #2

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

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

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

105赞 Eric Leschinski 10/15/2016 #3

PHP 声明的含义以及如何重现它:

如果你将一个PHP数组发送到一个需要字符串的函数中,如:或,那么PHP解释器会将你的数组转换为文字字符串,抛出这个通知并继续前进。例如:echoprintArray

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

在本例中,该函数将文本字符串 : 转储到 stdout,然后将 Notice 记录到 stderr 并继续前进。printArray

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' => '[email protected]');
foreach ($stuff as $key => $value) {
    echo "$key: $value\n";
}

指纹:

name: Joe
email: [email protected]

请注意,数组元素也可以是数组。在这种情况下,要么再次使用,要么使用数组语法访问这个内部数组元素,例如foreach$row['name']

更正 2:将数组中的所有单元格连接在一起:

如果它只是一个普通的 1 个解析数组,您可以简单地使用分隔符将所有单元格连接成一个字符串:

<?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' => '[email protected]');
print json_encode($stuff);

指纹

{"name":"Joe","email":"[email protected]"}

快速浏览数组结构:使用内置的 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)
}

评论

2赞 Andrew 6/1/2019
这应该是公认的答案。对我帮助很大。我也不得不用这个答案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”}]
1赞 Your Common Sense 11/20/2020
鉴于这个问题被用作规范的重复,我冒昧地添加了一些实际示例,因为简单地转储数组内容很少成为目标。
6赞 Nikola Kirincic 3/13/2019 #4

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

在数组上使用 不再是一个选项。printecho

禁止显示错误和通知不是一个好的做法,尤其是在开发环境中仍在调试代码时。

使用 ,, 遍历输入值 using 或 输出声明为输入数组 ('var_dumpprint_rforeachforname[]')

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

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

评论

3赞 Your Common Sense 11/20/2020
那将是一个非常糟糕的主意。在此错误中,没有什么可以“处理”的。它必须立即修复。在这里添加 try catch 绝对没有意义。
4赞 Andrei Dragomir 12/13/2019 #5
<?php
ob_start();
var_dump($_POST['C']);
$result = ob_get_clean();
?>

如果要在变量中捕获结果

0赞 Md. Delowar Hossen 10/3/2022 #6

您也可以尝试以下操作:

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

评论

0赞 mickmackusa 4/21/2023
isset($_POST['G'])在这种情况下似乎无关紧要。也许会是一个合乎逻辑的选择。这个答案缺少它的教育解释。!empty()