PHP-melding: niet-gedefinieerde offset: 1 met array bij het lezen van gegevens

Ik krijg deze PHP-fout:

PHP Notice:  Undefined offset: 1

Hier is de PHP-code die het genereert:

$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 fout? Wat veroorzaakt deze fout?


Antwoord 1, autoriteit 100%

Wijzigen

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

naar

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 explodeert het als resultaat een array van grootte 1.

Volgens php.net mogelijke retourwaarden van explode:

Retourneert een reeks tekenreeksen die zijn gemaakt door de tekenreeksparameter te splitsen op grenzen gevormd door het scheidingsteken.

Als scheidingsteken een lege tekenreeks (“”) is, geeft explode() FALSE terug. Als het scheidingsteken een waarde bevat die niet in tekenreeks zit en er wordt een negatieve limiet gebruikt, dan wordt een lege array geretourneerd, anders wordt een array met tekenreeks geretourneerd.


Antwoord 2, autoriteit 15%

Hoe de bovenstaande fout in PHP te reproduceren:

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 naar de sleutel 1 heeft gezocht en de hash ertegen heeft uitgevoerd en geen waarde heeft gevonden die ermee is geassocieerd, en zei toen Undefined offset: 1

Hoe zorg ik ervoor dat die fout verdwijnt?

Vraag de array of de sleutel bestaat voordat de waarde als volgt wordt geretourneerd:

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

Als de array uw sleutel niet bevat, vraag dan niet om de waarde ervan. Hoewel deze oplossing dubbel werk voor je programma maakt om “te controleren of het er is” en dan “ga het te halen”.

Alternatieve oplossing die sneller is:

Als het krijgen van een ontbrekende sleutel een uitzonderlijke omstandigheid is die wordt veroorzaakt door een fout, is het sneller om gewoon de waarde te krijgen (zoals in echo $yarr[1];), en die offset-fout op te vangen en af ​​te handelen het als volgt: https://stackoverflow.com/a/5373824/445131


Antwoord 3, autoriteit 2%

Update in 2020 in Php7:

er is een betere manier om dit te doen met behulp van de Null-coalescentie operator door gewoon het volgende te doen:

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

Antwoord 4

mijn snelste oplossing was min 1 tot de lengte van de array als

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

mijn offset was altijd de laatste waarde als de telling 140 was, dan staat er offset 140 maar na het gebruik van de min 1 was alles in orde


Antwoord 5

De ideale oplossing zou zijn zoals hieronder. U zult de waarden van 0 tot n niet missen.

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

Antwoord 6

In je code:
$parts = array_map('trim', explode(':', $line_of_text, 2));
Je hebt “:” als scheidingsteken. Als u een ander scheidingsteken in het bestand gebruikt, krijgt u een “Undefined offset: 1” maar niet “Undefined offset: 0” Alle informatie staat in $parts[0] maar geen informatie in $parts [1] of [2] enz. Probeer $part[0] te echo $part[0]; echo $part[1]; je ziet de informatie.


Antwoord 7

Dit is een “PHP-kennisgeving”, dus in theorie zou je deze kunnen negeren. Wijzig php.ini:

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

Naar

error_reporting = E_ALL & ~E_NOTICE

Hiermee worden alle fouten weergegeven, behalve meldingen.


Antwoord 8

Ik had onlangs dit probleem en ik geloofde niet eens dat het mijn typefout was:

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

En dat was het ook! Ik heb zojuist per ongeluk “.” getypt in plaats van “,“…


Antwoord 9

Verberg php-waarschuwingen in bestand

error_reporting(0);

Antwoord 10

De uitvoer van de fout is dat u bijvoorbeeld een index van de array aanroept die niet bestaat

$arr = Array(1,2,3);
echo $arr[3]; 
// Error PHP Notice:  Undefined offset: 1 pointer 3 does not exist, the array only has 3 elements but starts at 0 to 2, not 3!

LEAVE A REPLY

Please enter your comment!
Please enter your name here

8 − seven =

Other episodes