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
'programing tip' 카테고리의 다른 글
Haskell 경량 스레드 오버 헤드 및 멀티 코어에서 사용 (0) | 2020.12.12 |
---|---|
SQL Server : 여러 행을 하나의 행으로 결합 (0) | 2020.12.12 |
IB Designable의 인스턴스를 렌더링하지 못했습니다. (0) | 2020.12.11 |
디렉토리가 PHP에서 쓰기 가능한지 어떻게 확인합니까? (0) | 2020.12.11 |
WPF에서 컨트롤을 "클릭 스루"하려면 어떻게해야합니까? (0) | 2020.12.11 |