【问题标题】:How to solve PHP error 'Notice: Array to string conversion in...'如何解决 PHP 错误“注意:数组到字符串的转换...”
【发布时间】:2013-11-29 19:26:34
【问题描述】:

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


【解决方案1】:

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

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

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

【讨论】:

  • K 非常感谢您的清晰解释。它会打印出您所说的内容。这意味着我的数组已经发送到 PHP 文件。看来我可以毫无问题地使用。再次感谢。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    如果您将 PHP 数组发送到需要字符串的函数,例如:echoprint,那么 PHP 解释器会将您的数组转换为文字字符串 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 将文字字符串:Array 转储到标准输出,然后将通知记录到标准错误并继续。

    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' => 'joe@example.com');
    foreach ($stuff as $key => $value) {
        echo "$key: $value\n";
    }
    

    打印:

    name: Joe
    email: joe@example.com
    

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

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

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

    <?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' => 'joe@example.com');
    print json_encode($stuff);
    

    打印

    {"name":"Joe","email":"joe@example.com"}
    

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

    【讨论】:

    • 这应该是公认的答案。极大地帮助了我。我还必须在这个答案中使用 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"}]
    • 鉴于此问题被用作规范副本,我冒昧地添加了一些实际示例,因为简单地转储数组内容很少成为目标。
    【解决方案4】:

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

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

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

    使用var_dump,print_r,使用foreachfor 遍历输入值,以输出声明为输入数组的名称的输入数据('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();
      }
    

    【讨论】:

    • 那将是一个非常的坏主意。在这个错误中没有什么可以“处理”的。它必须立即修复。在这里添加 try catch 绝对没有意义。
    【解决方案5】:
    <?php
    ob_start();
    var_dump($_POST['C']);
    $result = ob_get_clean();
    ?>
    

    如果你想在变量中捕获结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-29
      • 2013-04-18
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      相关资源
      最近更新 更多