Como resolver o erro de PHP 'Aviso: conversão de matriz em string em ...'

117

Tenho um arquivo PHP que tenta ecoar um $_POSTe recebo um erro, aqui está o código:

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>'

Aqui está o código para ecoar o POST.

if(!empty($_POST['G'])){
    echo $_POST['C'];
}

Mas quando o código é executado, recebo um erro como:

Notice: Array to string conversion in 
C:\xampp\htdocs\PHIS\FinalSubmissionOfTheFormPHP.php on line 8

O que significa esse erro e como faço para corrigi-lo?

t4thilina
fonte
Qual é a linha 8? É $Texting[i]um erro de digitação? Não deveria ser assim $Texting[$i]?
Amal Murali
Por favor, mostre var_dump($Texting).
Barmar de
1
Olá ... Linha 8 significa, echo $ _POST ['C']. E var_dump ($ _ POST ['C']) é Arrayarray (3) {[0] => string (1) "A" [1] => string (4) "Masculino" [2] => string (6) "Fêmea" }. E var_dump ($ Texting) é array (3) {[0] => string (1) "A" [1] => string (4) "Masculino" [2] => string (6) "Fêmea"}. ..
t4thilina

Respostas:

110

Quando você tem muitas entradas HTML nomeadas, C[]o que obtém no array POST, na outra extremidade está um array desses valores em $_POST['C']. Então, quando você faz echoisso, está tentando imprimir um array, então tudo o que faz é imprimir Arraye um aviso.

Para imprimir corretamente um array, você pode fazer um loop através dele e de echocada elemento, ou pode usar print_r.

Alternativamente, se você não sabe se é um array ou uma string ou qualquer outra coisa, você pode usar o var_dump($var)qual lhe dirá qual é o tipo e qual é o seu conteúdo. Use-o apenas para fins de depuração.

jadkik94
fonte
Muito obrigado pela sua explicação clara. Ele imprime exatamente o que você disse. Isso significa que meu array já foi enviado para o arquivo PHP. Parece que posso usar sem nenhum problema. Obrigado novamente.
t4thilina
56

O que significa o aviso PHP e como reproduzi-lo:

Se você enviar um array PHP para uma função que espera uma string como: echoor print, então o interpretador PHP irá converter seu array em string literal Array, jogue este Notice e continue. Por exemplo:

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

Nesse caso, a função printdespeja a string literal: Arraypara stdout e, em seguida, registra o Aviso em stderr e continua.

Outro exemplo em um script PHP:

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

Você tem 2 opções, converter seu array PHP em String usando um conversor de array em string ou suprimir o Aviso PHP.

Correção 1: use a função interna do php print_r ou var_dump:

http://php.net/manual/en/function.print-r.php ou http://php.net/manual/en/function.var-dump.php

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

Impressões:

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

Correção 2: use json_encode para recolher a matriz para a string json:

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

Correção 3: juntando todas as células da matriz:

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

Correção 4: suprimir os Avisos:

error_reporting(0);
print(array(1,2,3));    //Prints 'Array' without a Notice.
Eric Leschinski
fonte
Esta deve ser a resposta aceita. Me ajudou imensamente. Eu também tive que usar json_encode com esta resposta. print_r (json_encode ($ AuthData)); Resultado semelhante a este: [{"system_id": "61a694d0-3605-4502-952b-38d87b451a56", "system_auth_id": "caa5906f-d9ae-4297-8e9f-5ea8d9ed8b51", "system_lastauth_id5-31": " a23d-6608c696f264 "," system_rundate ":" 2019-04-27T22: 46: 07.090Z "}]
Andrew
5

Você está usando <input name='C[]'em seu HTML. Isso cria um array em PHP quando o formulário é enviado.

Você está usando echo $_POST['C'];para ecoar esse array - isso não funcionará, mas em vez disso, emitirá aquele aviso e a palavra "Array".

Dependendo do que você fez com o resto do código, você provavelmente deve usar echo $_POST['C'][0];

Sven
fonte
3

Array to string conversion nas últimas versões do php 7.x é um erro, ao invés de aviso, e impede a execução de código adicional.

Usar print, echoon array não é mais uma opção.

Suprimir erros e avisos não é uma boa prática, especialmente quando em ambiente de desenvolvimento e ainda depurando código.

Use var_dump, print_r, iterate através de valor de entrada usando foreachou foraos dados de entrada de saída para nomes que são declarados como matrizes de entrada (' name[]')

A prática mais comum para detectar erros é usar try/catchblocos, o que nos ajuda a evitar a interrupção da execução do código que pode causar possíveis erros encapsulados no trybloco.

  try{  //wrap around possible cause of error or notice

    if(!empty($_POST['G'])){
        echo $_POST['C'];
    }

  }catch(Exception $e){

    //handle the error message $e->getMessage();
  }
Nikola Kirincic
fonte
1
<?php
ob_start();
var_dump($_POST['C']);
$result = ob_get_clean();
?>

se você deseja capturar o resultado em uma variável

Andrei Dragomir
fonte