[php] PHP 오류 해결 방법 ‘알림 : 배열에서 문자열로 변환…’

에코를 시도하는 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

이 오류는 무엇을 의미하며 어떻게 수정합니까?



답변

이름이 많은 HTML 입력 C[]이있는 경우 다른 쪽 끝에있는 POST 배열에서 얻는 것은 $_POST['C']. 그래서 echo당신은 배열을 인쇄하려고 할 때 인쇄 Array와 통지 만 수행합니다.

배열을 올바르게 인쇄하려면 배열과 echo각 요소를 반복 하거나 print_r.

또는 배열인지 문자열인지 모르는 경우 var_dump($var)유형이 무엇인지, 내용이 무엇인지 알려주는 것을 사용할 수 있습니다 . 디버깅 목적으로 만 사용하십시오.


답변

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을 stdout에 덤프 한 다음 알림을 stderr에 기록하고 계속 진행합니다.

PHP 스크립트의 또 다른 예 :

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

두 가지 옵션이 있습니다. 배열-문자열 변환기를 사용하여 PHP 배열을 String으로 캐스트하거나 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.


답변

<input name='C[]'HTML에서 사용 하고 있습니다. 이것은 양식이 전송 될 때 PHP에서 배열을 생성합니다.

당신은 echo $_POST['C'];그 배열을 에코하기 위해 사용 하고 있습니다-이것은 작동하지 않을 것이지만, 대신 그 통지와 단어 “Array”를 내 보냅니다.

나머지 코드로 수행 한 작업에 따라 echo $_POST['C'][0];


답변

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


답변

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

결과를 변수로 캡처하려는 경우


답변