Hoe PHP-fout ‘Opmerking: conversie van array naar string in…’ op te lossen

Ik heb een PHP-bestand dat een $_POSTprobeert na te bootsen en ik krijg een foutmelding, hier is de code:

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

Hier is de code om de POST te herhalen.

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

Maar wanneer de code wordt uitgevoerd, krijg ik een foutmelding zoals:

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

Wat betekent deze fout en hoe los ik deze op?


Antwoord 1, autoriteit 100%

Als je veel HTML-invoer hebt met de naam C[], krijg je in de POST-array aan de andere kant een array van deze waarden in $_POST['C']. Dus wanneer u dat echo, probeert u een array af te drukken, dus het enige wat het doet is Arrayen een melding afdrukken.

Om een array correct af te drukken, loop je er doorheen en echoelk element, of je kunt print_rgebruiken.

Als je niet weet of het een array of een string of wat dan ook is, kun je var_dump($var)gebruiken, die je vertelt welk type het is en wat de inhoud ervan is. Gebruik dat alleen voor foutopsporingsdoeleinden.


Antwoord 2, autoriteit 56%

Wat de PHP-kennisgeving betekent en hoe deze te reproduceren:

Als je een PHP-array naar een functie stuurt die een tekenreeks verwacht zoals: echoof print, dan zal de PHP-interpreter je array converteren naar de letterlijke tekenreeks Array, gooi deze mededeling weg en ga door. Bijvoorbeeld:

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

In dit geval dumpt de functie printde letterlijke tekenreeks: Arraynaar stdout en logt vervolgens de kennisgeving in stderr en gaat door.

Nog een voorbeeld in een PHP-script:

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

Correctie 1: gebruik foreach-lus om toegang te krijgen tot array-elementen

http://php.net/foreach

$stuff = array(1,2,3);
foreach ($stuff as $value) {
    echo $value, "\n";
}

Afdrukken:

1
2
3

Of samen met array-sleutels

$stuff = array('name' => 'Joe', 'email' => '[email protected]');
foreach ($stuff as $key => $value) {
    echo "$key: $value\n";
}

Afdrukken:

name: Joe
email: [email protected]

Merk op dat array-elementen ook arrays kunnen zijn. Gebruik in dit geval opnieuw foreachof krijg toegang tot deze binnenste array-elementen met behulp van arraysyntaxis, b.v. $row['name']

Correctie 2: Alle cellen in de array samenvoegen:

In het geval dat het slechts een gewone 1-dimensionale array is, kunt u eenvoudig alle cellen samenvoegen tot een string met behulp van een scheidingsteken:

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

Correctie 3: Stringifieer een array met een complexe structuur:

In het geval dat je array een complexe structuur heeft maar je het toch naar een string moet converteren, gebruik dan http://php .net/json_encode

$stuff = array('name' => 'Joe', 'email' => '[email protected]');
print json_encode($stuff);

Afdrukken

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

Een snelle blik in de array-structuur: gebruik de ingebouwde php-functies

Als u alleen de array-inhoud wilt inspecteren voor het debuggen, gebruikt u een van de volgende functies. Houd er rekening mee dat var_dump het meest informatief is en daarom meestal de voorkeur heeft voor het doel

voorbeelden

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

Afdrukken:

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

Antwoord 3, Autoriteit 5%

U gebruikt <input name='C[]'in uw HTML. Dit maakt een array in PHP wanneer het formulier wordt verzonden.

U gebruikt echo $_POST['C'];om die array echo – Dit zal niet werken, maar in plaats daarvan stoten die aankondiging en het woord “Array”

.

Afhankelijk van wat je deed met de rest van de code, moet je waarschijnlijk gebruik maken van echo $_POST['C'][0];


Antwoord 4, Autoriteit 2%

Array to string conversionin de nieuwste versies van php 7.x is fout, in plaats van kennisgeving, en voorkomt verdere uitvoering van code.

Met behulp van print, echoop rij is geen optie meer.

Het onderdrukken van fouten en mededelingen is niet een goede praktijk, vooral wanneer in de ontwikkelomgeving en nog steeds debuggen code.

Gebruik var_dumpprint_rDoorloop ingangswaarde met foreachof foroutput invoergegevens namen die worden aangegeven als invoer arrays ( ‘name[])

De meest voorkomende praktijk vangst fouten is het gebruik van try/catchblokken, die ons helpt te voorkomen dat onderbreking van de uitvoering van code die zouden kunnen leiden tot mogelijke fouten verpakt binnen tryblok.

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

Antwoord 5, Autoriteit 2%

<?php
ob_start();
var_dump($_POST['C']);
$result = ob_get_clean();
?>

Als u het resultaat in een variabele

wilt vastleggen

Other episodes