Ik heb een PHP-bestand dat een $_POST
probeert 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 Array
en een melding afdrukken.
Om een array correct af te drukken, loop je er doorheen en echo
elk element, of je kunt print_r
gebruiken.
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: echo
of 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 print
de letterlijke tekenreeks: Array
naar 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
$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 foreach
of 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 conversion
in de nieuwste versies van php 7.x is fout, in plaats van kennisgeving, en voorkomt verdere uitvoering van code.
Met behulp van print
, echo
op 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_dump
print_r
Doorloop ingangswaarde met foreach
of for
output invoergegevens namen die worden aangegeven als invoer arrays ( ‘name[]
)
De meest voorkomende praktijk vangst fouten is het gebruik van try/catch
blokken, die ons helpt te voorkomen dat onderbreking van de uitvoering van code die zouden kunnen leiden tot mogelijke fouten verpakt binnen try
blok.
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