webForumDet fria alternativet

Undefined offset

PHPur PHP

7 svar · 958 visningar · startad av K@llen

Medlem sedan mars 20032 667 inlägg
Frågan#1

Hejsan gurus,

Har ett problem jag inte lyckas få rätt på. Misstänker att det har med odefierat index i en array att göra. Felmeddelande:

Undefined offset: 46

$quoteText = $row['quoteText'];	
$shortText = explode(" ", $quoteText);
for ($i = 0; $i < 47; $i++) {
  	echo $shortText[$i] . " ";
}

Hur bär jag mig åt för att få bort varningen?

Medlem sedan feb. 20005 891 inlägg
#2

Är du säker på att det alltid blir 47 element i arrayen?

Bättre att räkna antalet element i $shortText:

for ($i = 0; $i < count($shortText); $i++) {
  	echo $shortText[$i] . " ";
}
Medlem sedan mars 20032 667 inlägg
#3

Oj, nej det är jag inte. Vill dock bara presentera 47 element.

Då får jag sätta villkoret i loopen dynamiskt. Tack casca. :)

Medlem sedan mars 20032 667 inlägg
#4

Kod för att lösa problemet:

if ( count($shortText) < 47 ) { $z = count($shortText); } else { $z = 47; }
				
for ($i = 0; $i < $z; $i++) {
    echo $shortText[$i] . " ";
}
Medlem sedan juni 20019 519 inlägg
#5

borde du inte kunna skriva det så här:

$z = min(count($shortText), 47);
Medlem sedan mars 2007845 inlägg
#6

voigtann1 skrev:

borde du inte kunna skriva det så här:

$z = min(count($shortText), 47);

Jo, och skulle dessutom se snyggare ut. Tycker jag.

Medlem sedan mars 20032 667 inlägg
#7

Tack för förbättringen voigtann1. Läste dock följande kommentar i dokumentationen, så snyggast är kanske inte alltid bäst:

I tested this with max(), but I suppose it applies to min() too: If you are working with numbers, then you can use:

$a = ($b \< $c) ? $b : $c;

which is somewhat faster (roughly 16%) than

$a = min($b, $c);

I tested this on several loops using integers and floats, over 1 million iterations.

I'm running PHP 4.3.1 as a module for Apache 1.3.27.

Medlem sedan juni 20019 519 inlägg
#8

Men i ditt fall så kör du metoden count() två gånger, man få kolla vad som passar dig bäst, i personens exempel så är det 1 miljon loopar, vilket förmodligen inte är något man kommer ha i någon normal loop.

135 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)