phpbar.de logo

Mailinglisten-Archive

[php] array sortieren

[php] array sortieren

Norbert Pfeiffer php_(at)_phpcenter.de
Tue, 18 Sep 2001 22:05:17 +0200


Hallo Leute,

> $prd['a'][punkte] = 30;
> $prd['a'][ko] = 1;
> $prd['a'][eli] = 1;
> $prd['b'][punkte] = 15;
> $prd['b'][ko] = 2;
> $prd['b'][eli] = 0;
> $prd['c'][punkte] = 20;
> $prd['c'][ko] = 2;
> $prd['c'][eli] = 1;
das ist einfach nur ungeschickt hingeschrieben, mehr nicht:

$prd['a'] = array("punkte"=>30, "ko"=>1, "eli"=>1);
$prd['b'] = array("punkte"=>15, "ko"=>2, "eli"=>0);
$prd['c'] = array("punkte"=>20, "ko"=>2, "eli"=>1);

Das ist also eine simple dreispaltige Tabelle!

Diese kann man mit 'usort();' nach 'einem' Wert sortieren,
entweder 'punkte' oder 'ko' oder 'eli', mehr ist erstmal nicht.

In einem zweiten Durchlauf, koennte man das Array in Subarrays
zerlegen, fuer jeweils gleiche Werte von 'punkte', und diese
Subarrays dann z.B. nach 'ko' sortieren.

Last not least laessen sich im dritten Lauf Subarrays fuer
gleiche Werte von 'ko' innerhalb der identischen Werte von
'punkte' dann nach 'eli' sortieren - ohh Mann - OO is geil!

Aber den Stress wuerde ich  mir nicht antun wollen, ehrlich!
Das geht auch wesentlich trivialer,
so man sich Spaltennamen merken kann, sonst natuerlich nicht... ;-)

$neu = array();
echo "<pre>vorher:\n";
reset($prd);
while(list($kaa,$vaa)=_(at)_each($prd))
     {$key = "";
      /* Sortierreihenfolge nach Bedarf aendern */
      $key .= sprintf("%05s", $vaa['punkte']);
      $key .= sprintf("%05s", $vaa['ko']);
      $key .= sprintf("%05s", $vaa['eli']);
      $key .= $kaa;
      $val = implode($vaa, "¯");
      $neu[$key] = $val;
      echo " key: ".$key." - val: ".$val."\n";
      }
ksort($neu);
echo "nachher:\n";
reset($neu);
while(list($kaa,$vaa)=_(at)_each($neu))
     {echo " key: ".$kaa." - val: ".$vaa."\n";
      }
echo "das wars schon... ;-)</pre>\n";

Hinweis, sollten die Puenktjes mehr als 5 Stellen haben,
oder mal noch Strings drin sein, ist wurscht, einfach den
Key laenger machen... ;-)


m. b. G. Norbert (der Repetitor)
________________________________
normal:             02292-681769
Notruf:             0177-2373368
--------------------------------
e.o.m.





php::bar PHP Wiki   -   Listenarchive