phpbar.de logo

Mailinglisten-Archive

[php] Problem mit asort/arsort

[php] Problem mit asort/arsort

Kristian =?iso-8859-1?Q?K=F6hntopp?= kk_(at)_netuse.de
Sun, 05 Sep 1999 19:35:36 +0200


Egon Schmid wrote:
> Ansonsten ist das folgende
> korrektes PHP3 (und wahrscheinlich aus dem Handbuch abgeschrieben).
> 
> > arsort($Wert3);
> > for(reset($Wert3); $index=key($Wert3); next($Wert3))
> > {
> >  print("$Text[$index] : $Wert1[$index] : $Wert2[$index] : $Wert3[$index]
> > <BR>\n");
> > }
> > ?>
> 

kk_(at)_land:~ > Source/php3/php
<?php
 $a[-2] = 20;
 $a[2] = 10;
 $a[3] = 1000;
 $a[4] = -10;
 $a[5] = 17;
 $a[0] = 0;
for (reset($a); $i = key($a); next($a)) { print "$i $a[$i]\n"; }
Content-type: text/html

-2 20
2 10
3 1000
4 -10
5 17
arsort($a);

for (reset($a); $i = key($a); next($a)) { print "$i $a[$i]\n"; }
3 1000
-2 20
5 17
2 10

^D

1. Definiere ein Array mit verschiedenen Arrayindeces und Werten.
2. Gebe das Array aus. Conspiciously absent: $a[0]. Why?
   key($a) für $a[0] ist 0. key($a) für $a[arrayende] ist false.
   Beide Werte sind in PHP ununterscheidbar (nicht so in Perl).
3. Nach dem arsort($a) steht $a[0] irgendwo in der Mitte des Arrays,
   die Arrayelemente nach $a[0] sind mit der o.a. Schleife nicht
   mehr erreichbar, weil $a[0] falsch als Arrayende erkannt wird.
4. Die einzig korrekte Weise in PHP ein Array zu durchlaufen ist

   while(list($k, $v) = each($a)) { print "$k $v\n$ }

Das ergibt dann korrekt:

arsort($a);
while(list($k, $v) = each($a)) { print "$k, $v\n"; }
3, 1000
-2, 20
5, 17
2, 10
0, 0
4, -10



Perl hat dieses Problem nicht. Es unterscheidet undef und 0.

Kristian

-- 
Kristian Köhntopp, NetUSE Kommunikationstechnologie GmbH
Siemenswall, D-24107 Kiel, Germany, +49 431 386 436 00
Using PHP3? See our web development library at
http://phplib.shonline.de/ (GPL)


php::bar PHP Wiki   -   Listenarchive