提问人:t4thilina 提问时间:11/16/2013 最后编辑:Your Common Senset4thilina 更新时间:11/12/2023 访问量:1366602
'注意:数组到字符串的转换......”错误
'Notice: Array to string conversion in...' error
问:
我有一个 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
此错误是什么意思,如何解决?
答:
该错误表示您正在尝试使用数组,就好像它是字符串一样。
例如
$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']
echo
Array
要正确打印数组,您可以遍历它和每个元素,也可以使用 .echo
print_r
或者,如果你不知道它是数组还是字符串或其他什么,你可以使用它来告诉你它是什么类型以及它的内容是什么。仅将其用于调试目的。var_dump($var)
您正在 HTML 中使用。这会在发送表单时在 PHP 中创建一个数组。<input name='C[]'
您正在用于回显该数组 - 这将不起作用,而是发出该通知和单词“Array”。echo $_POST['C'];
根据你对其余代码所做的工作,你可能应该使用echo $_POST['C'][0];
PHP 声明的含义以及如何重现它:
如果你将一个PHP数组发送到一个需要字符串的函数中,如:或,那么PHP解释器会将你的数组转换为文字字符串,抛出这个通知并继续前进。例如:echo
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
在本例中,该函数将文本字符串 : 转储到 stdout,然后将 Notice 记录到 stderr 并继续前进。print
Array
PHP 脚本中的另一个示例:
<?php
$stuff = array(1,2,3);
print $stuff; //PHP Notice: Array to string conversion in yourfile on line 3
?>
更正 1:使用 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)
}
评论
Array to string conversion
在最新版本的 PHP 7.x 中,是错误的,而不是通知,并阻止进一步的代码执行。
在数组上使用 不再是一个选项。print
echo
禁止显示错误和通知不是一个好的做法,尤其是在开发环境中仍在调试代码时。
使用 ,, 遍历输入值 using 或 输出声明为输入数组 ('var_dump
print_r
foreach
for
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']) && isset($_POST['c']){
for($i=0; $i< count($_POST['C']); $i++){
echo $_POST['C'][$i];
}
}
评论
isset($_POST['G'])
在这种情况下似乎无关紧要。也许会是一个合乎逻辑的选择。这个答案缺少它的教育解释。!empty()
评论
$Texting[i]
$Texting[$i]
var_dump($Texting)