programing tip

PHP 알림 : 정의되지 않은 오프셋 : 데이터를 읽을 때 배열이있는 1

itbloger 2020. 12. 11. 07:56
반응형

PHP 알림 : 정의되지 않은 오프셋 : 데이터를 읽을 때 배열이있는 1


이 PHP 오류가 발생합니다.

PHP Notice:  Undefined offset: 1

다음은 그것을 던지는 PHP 코드입니다.

$file_handle = fopen($path."/Summary/data.txt","r"); //open text file
$data = array(); // create new array map

while (!feof($file_handle) ) {
    $line_of_text = fgets($file_handle); // read in each line
    $parts = array_map('trim', explode(':', $line_of_text, 2)); 
    // separates line_of_text by ':' trim strings for extra space
    $data[$parts[0]] = $parts[1]; 
    // map the resulting parts into array 
    //$results('NAME_BEFORE_:') = VALUE_AFTER_:
}

이 오류는 무엇을 의미합니까? 이 오류의 원인은 무엇입니까?


변화

$data[$parts[0]] = $parts[1];

...에

if ( ! isset($parts[1])) {
   $parts[1] = null;
}

$data[$parts[0]] = $parts[1];

또는 간단히 :

$data[$parts[0]] = isset($parts[1]) ? $parts[1] : null;

파일의 모든 줄에 콜론이있는 것은 아니므로 폭발하면 크기 1의 배열이 반환됩니다.

php.net 에 따르면 explode 에서 가능한 반환 값 :

구분 기호로 형성된 경계에서 문자열 매개 변수를 분할하여 생성 된 문자열 배열을 반환합니다.

구분 기호가 빈 문자열 ( "")이면 explode ()는 FALSE를 반환합니다. 구분 기호에 문자열에 포함되지 않은 값이 포함되어 있고 음수 제한이 사용되면 빈 배열이 반환되고 그렇지 않으면 문자열이 포함 된 배열이 반환됩니다.


PHP에서 위의 오류를 재현하는 방법 :

php> $yarr = array(3 => 'c', 4 => 'd');

php> echo $yarr[4];
d

php> echo $yarr[1];
PHP Notice:  Undefined offset: 1 in 
/usr/local/lib/python2.7/dist-packages/phpsh/phpsh.php(578) : 
eval()'d code on line 1

그 오류 메시지는 무엇을 의미합니까?

그것은 PHP 컴파일러가 키를 1찾고 그것에 대해 해시를 실행했으며 그와 관련된 값을 찾지 못했음을 의미합니다.Undefined offset: 1

그 오류를 없애려면 어떻게해야합니까?

다음과 같이 값을 반환하기 전에 키가 있는지 배열에 문의하십시오.

php> echo array_key_exists(1, $yarr);

php> echo array_key_exists(4, $yarr);
1

배열에 키가 포함되어 있지 않으면 값을 묻지 마십시오. 이 솔루션은 프로그램이 "있는지 확인"한 다음 "가져 오기"를 위해 이중 작업을 수행하지만.

더 빠른 대체 솔루션 :

누락 된 키를 얻는 것이 오류로 인한 예외적 인 상황 인 경우 값을 가져와 (에서와 같이 echo $yarr[1];) 오프셋 오류를 포착하여 다음과 같이 처리하는 것이 더 빠릅니다 . https://stackoverflow.com/a/5373824/445131


이것은 "PHP 통지"이므로 이론상 무시할 수 있습니다. 변경 php.ini:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

error_reporting = E_ALL & ~E_NOTICE

This show all errors, except for notices.


The ideal solution would be as below. You won't miss the values from 0 to n.

$len=count($data);
for($i=0;$i<$len;$i++)
     echo $data[$i]. "<br>";

I just recently had this issue and I didn't even believe it was my mistype:

Array("Semester has been set as active!", true)
Array("Failed to set semester as active!". false)

And actually it was! I just accidentally typed "." rather than ","...


Hide php warnings in file

error_reporting(0);

my quickest solution was to minus 1 to the length of the array as

  $len = count($data);

    for($i=1; $i<=$len-1;$i++){
      echo $data[$i];
    }

my offset was always the last value if the count was 140 then it will say offset 140 but after using the minus 1 everything was fine

참고URL : https://stackoverflow.com/questions/17456325/php-notice-undefined-offset-1-with-array-when-reading-data

반응형