PHP 오류 해결 방법 '알림 : 배열에서 문자열로 변환…'


116

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

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


8 번 줄은 어느 것입니까? 인가 $Texting[i]오타는? $Texting[$i]대신 해야하지 않습니까?
Amal Murali 2013

보여주세요 var_dump($Texting).
Barmar 2011

1
안녕 ... 8 행은 echo $ _POST [ 'C']를 의미합니다. 그리고 var_dump ($ _ POST [ 'C'])는 Arrayarray (3) {[0] => string (1) "A"[1] => string (4) "Male"[2] => string (6)입니다. "여자" }. 그리고 var_dump ($ Texting)은 array (3) {[0] => string (1) "A"[1] => string (4) "Male"[2] => string (6) "Female"}입니다. ..
t4thilina 2013

답변:


110

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

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

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


K 귀하의 명확한 설명에 감사드립니다. 정확히 당신이 말한 것을 인쇄합니다. 내 배열이 이미 PHP 파일로 전송되었음을 의미합니다. 아무 문제없이 사용할 수있을 것 같습니다. 다시 감사합니다.
t4thilina 2013

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을 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.

이것은 받아 들여진 대답이어야합니다. 나를 크게 도왔습니다. 나는 또한이 대답과 함께 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": "ace681bb-48f5-4831- a23d-6608c696f264 ","system_rundate ":"2019-04-27T22 : 46 : 07.090Z "}]
Andrew

5

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

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

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


2

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.