Moin!
Kenne so etwas nur aus VB bisher:
UBOUND(arr)
Vielleicht suchst du count().
UBOUND() und count() sind nicht das selbe!
count() ermittelt die Anzahl der Elemente in einem Array - wobei ein PHP-Array ja eigentlich eher ein Hash ist, bzw. genauer gesagt eine verkettete Liste, deren Schlüssel sowohl Strings als auch Zahlen sein können.
UBOUND() ermittelt in einem VBSCRIPT-Array die obere Grenze der Arrayindices. Analog gibt es LBOUND(), welches die untere Grenze der Arrayindices ermittelt (allerdings sind die Arrays nullbasiert, LBOUND() ergibt also immer die 0). Ein VBSCRIPT-Array ist dabei wirklich ein echtes Array, d.h. wenn man ermittelt hat, dass es von 0 bis 7 geht, dann existieren auch alle diese Elemente.
Bei einem PHP-Array hingegen kann es durchaus Lücken geben. Alle nicht schon mal definierten, numerisch indizierten Arrayelemente existieren nicht - und werfen im Zugriffsfall eventuell eine NOTICE.
Beispiel VBSCRIPT:
dim arr(5), i
arr(2) = "zwei"
arr(4) = "vier"
for i = lbound(arr) to ubound(arr)
Response.write(i&": " & arr(i) & "<br>"&vbCRLF)
next
ergibt:
0: <br>
1: <br>
2: zwei<br>
3: <br>
4: vier<br>
5: <br>
Beispiel PHP:
error_reporting(E_ALL);
$arr = array();
$arr[2] = "zwei";
$arr[4] = "vier";
for ($i = 0; $i <= count($arr); $i++)
{
echo $i.": ".$arr[$i]."<br>\n";
}
ergibt:
Notice: Undefined offset: 0 in /var/www/www.rautenberg.privat/htdocs/arraytest.php on line 16
0: <br>
Notice: Undefined offset: 1 in /var/www/www.rautenberg.privat/htdocs/arraytest.php on line 16
1: <br>
2: zwei<br>
Da nur zwei Elemente definiert sind, ergibt count() nur 2, und es werden nur drei Schleifendurchläufe (0, 1, 2) durchgeführt.
Man muß seine Schleifenlogik also entsprechend anpassen!
- Sven Rautenberg
My sssignature, my preciousssss!