Как устранить ошибку PHP «Примечание: преобразование массива в строку в…»

117

У меня есть файл 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

Что означает эта ошибка и как ее исправить?

t4thilina
источник
Какая строка 8? Является ли $Texting[i]это опечатка? Разве это не должно быть $Texting[$i]вместо этого?
Амаль Мурали
Пожалуйста, покажите var_dump($Texting).
Barmar
1
Привет ... Строка 8 означает, echo $ _POST ['C']. И var_dump ($ _ POST ['C']) - это Arrayarray (3) {[0] => строка (1) «A» [1] => строка (4) «Мужской» [2] => строка (6) "Женский" }. А var_dump ($ Texting) - это массив (3) {[0] => строка (1) «A» [1] => строка (4) «Мужской» [2] => строка (6) «Женский»}. ..
t4thilina

Ответы:

110

Когда у вас есть много входов HTML с именами, C[]то, что вы получаете в массиве POST на другом конце, представляет собой массив этих значений в $_POST['C']. Итак, когда вы echoэто делаете , вы пытаетесь распечатать массив, поэтому все, что он делает, это печать Arrayи уведомление.

Чтобы правильно распечатать массив, вы либо просматриваете его и echoкаждый элемент, либо можете использовать print_r.

В качестве альтернативы, если вы не знаете, массив это, строка или что-то еще, вы можете использовать, var_dump($var)который сообщит вам, какой это тип и каково его содержимое. Используйте это только для целей отладки.

jadkik94
источник
K большое спасибо за ваше ясное объяснение. Он распечатывает то, что именно вы сказали. Это означает, что мой массив уже отправлен в файл PHP. Кажется, я могу использовать без проблем. Еще раз спасибо.
t4thilina
56

Что означает уведомление PHP и как его воспроизвести:

Если вы отправляете массив PHP в функцию, которая ожидает строку типа: echoили print, то интерпретатор 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
?>

У вас есть 2 варианта: либо преобразовать массив PHP в строку с помощью преобразователя массива в строку, либо подавить уведомление PHP.

Исправление 1: используйте встроенную функцию php print_r или var_dump:

http://php.net/manual/en/function.print-r.php или 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);

Печать:

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

Исправление 2: используйте json_encode, чтобы свернуть массив в строку json:

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

Исправление 3: объединение всех ячеек в массиве вместе:

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

Исправление 4: подавить уведомления:

error_reporting(0);
print(array(1,2,3));    //Prints 'Array' without a Notice.
Эрик Лещинский
источник
Это должен быть принятый ответ. Мне очень помогли. Мне также пришлось использовать 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" -485685-481- a23d-6608c696f264 "," system_rundate ":" 2019-04-27T22: 46: 07.090Z "}]
Эндрю
5

Вы используете <input name='C[]'в своем HTML. Это создает массив в PHP при отправке формы.

Вы используете echo $_POST['C'];эхо этого массива - это не сработает, а вместо этого выдаст это уведомление и слово «Массив».

В зависимости от того, что вы сделали с остальной частью кода, вам, вероятно, следует использовать echo $_POST['C'][0];

Свен
источник
3

Array to string conversion в последних версиях php 7.x это ошибка, а не уведомление, и предотвращает дальнейшее выполнение кода.

Использование print, echoв массиве больше не вариант.

Подавление ошибок и уведомлений не является хорошей практикой, особенно в среде разработки и все еще отлаживает код.

Используйте var_dump, print_r, итерация через входное значение , используя foreachили forдля вывода входных данных для имен, объявленных в качестве входных массивов (» name[]«)

Наиболее распространенной практикой для обнаружения ошибок является использование try/catchблоков, которые помогают нам предотвратить прерывание выполнения кода, которое может вызвать возможные ошибки, заключенные в tryблок.

  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();
  }
Никола Киринчич
источник
1
<?php
ob_start();
var_dump($_POST['C']);
$result = ob_get_clean();
?>

если вы хотите зафиксировать результат в переменной

Андрей Драгомир
источник