搜索

首页  >  问答  >  正文

解决PHP错误:将数组转换为字符串时的注意事项

<p>我有一个PHP文件,试图输出一个<code>$_POST</code>,但是我得到了一个错误,下面是代码:</p> <pre class="brush:php;toolbar:false;">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>'</pre> <p>这里是输出POST的代码。</p> <pre class="brush:php;toolbar:false;">if(!empty($_POST['G'])){ echo $_POST['C']; }</pre> <p>但是当代码运行时,我得到了一个错误,像这样:</p> <pre class="brush:php;toolbar:false;">Notice: Array to string conversion in C:xampphtdocsPHISFinalSubmissionOfTheFormPHP.php on line 8</pre> <p>这个错误是什么意思,我该如何修复它?</p>
P粉538462187P粉538462187459 天前554

全部回复(2)我来回复

  • P粉986860950

    P粉9868609502023-08-22 09:46:05

    PHP Notice的含义及如何重现:

    如果你将一个PHP数组传递给一个期望字符串的函数,比如echoprint,那么PHP解释器会将你的数组转换为字面字符串Array,抛出这个Notice并继续执行。例如:

    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输出到stdout,然后将Notice记录到stderr并继续执行。

    另一个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);    //输出 1, 2, 3
        print join(',', $stuff);        //输出 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)
    }

    回复
    0
  • P粉739886290

    P粉7398862902023-08-22 00:07:45

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

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

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

    回复
    0
  • 取消回复