Ik krijg deze PHP foutmelding:
PHP Notice: Undefined offset: 1
Hier is de PHP code die deze fout veroorzaakt:
$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_:
}
Wat betekent deze foutmelding? Wat veroorzaakt deze fout?
Verander
$data[$parts[0]] = $parts[1];
in
if ( ! isset($parts[1])) {
$parts[1] = null;
}
$data[$parts[0]] = $parts[1];
of gewoon:
$data[$parts[0]] = isset($parts[1]) ? $parts[1] : null;
Niet elke regel van je bestand heeft een dubbele punt en daarom geeft explode on it een array van grootte 1 terug.
Volgens php.net possible return values from explode:
Geeft een array van strings terug die zijn gemaakt door de stringparameter te splitsen op grenzen die worden gevormd door de begrenzer.
Als delimiter een lege string is (""), zal explode() FALSE teruggeven. Als het scheidingsteken een waarde bevat die niet in de string voorkomt en er wordt een negatieve limiet gebruikt, dan wordt een lege array geretourneerd, anders wordt een array met string geretourneerd.
Hoe de bovenstaande fout te reproduceren in 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
Wat betekent die foutmelding?
Het betekent dat de php compiler zocht naar de sleutel 1
en er de hash tegen afzette en geen waarde vond die ermee geassocieerd was en zei Undefined offset: 1
**Hoe kan ik die fout laten verdwijnen?
Vraag de array of de sleutel bestaat voordat je de waarde teruggeeft, zoals dit:
php> echo array_key_exists(1, $yarr);
php> echo array_key_exists(4, $yarr);
1
Als de array je sleutel niet bevat, vraag dan niet naar de waarde. Hoewel deze oplossing dubbel werk voor uw programma maakt om "te controleren of het'er is" en dan "het te gaan halen".
Alternatieve oplossing die'sneller is:
Als het krijgen van een ontbrekende sleutel een uitzonderlijke omstandigheid is veroorzaakt door een fout, is het'sneller om gewoon de waarde te krijgen (zoals in echo $yarr[1];
), en die offset fout te vangen en af te handelen zoals dit: https://stackoverflow.com/a/5373824/445131
Dit is een "PHP Notice", dus je zou het in theorie kunnen negeren. Verander php.ini
:
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
Naar
error_reporting = E_ALL & ~E_NOTICE
Dit toont alle fouten, behalve mededelingen.