Sven Rautenberg: Arraygrösse bestimmen

Beitrag lesen

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!