Avatar billede sthen Nybegynder
20. december 2004 - 00:56 Der er 2 kommentarer og
1 løsning

Lidt kosmetik i et array

Har et script der henter varer m.m. ud af en MySQL database, hvor varebetegnelserne er kommaseparerede.
Efter "hentning" sorteres varerne alfabetisk og udskrives herefter til skærmen.

Scriptet ser i store træk således ud:

<?php
include('../connect/connect.php');

($res = mysql_query("select * from aftaler")) || die(mysql_error());
while($data = mysql_fetch_array($res)) {
    if ($data['vare_nr']!=""){
        $alle = explode(",",$data['vare_nr']); 
        for ($i=0;$i<count($alle);$i++){
            $sorterings_array[] = $alle[$i];
        }
    }
}

$sorteret_array = array_unique ($sorterings_array); // fjerner dubletter fra $sorterings_array
sort($sorteret_array);  // sorterer og giver array nye nøgler der starter med 0

for ($s=0;$s<count($sorteret_array);$s++){
    echo $s." ".$sorteret_array[$s]."<br>";
}

?>

Jeg får herved et output der f.eks. ser ud som følger:

bøger
kaffe
kuglepenne
lim
limstifter
noder
papir

Og nu til mit spørgsmål:
Hvorledes kan jeg få outputtet på skærmen til at blive:

B:
bøger

K:
kaffe
kuglepenne

L:
lim
limstifter

N:
noder

P:
papir

- altså således at hvert nyt begyndelsesbogstav i outputtet angives med begyndelsesbogstavet alene, for herefter at liste varerne op.

Måske en løkke og et array kørende inde i hinanden ?? Jeg må her melde pas.
Avatar billede coderdk Praktikant
20. december 2004 - 01:02 #1
En lettere optimeret version, der gør det du beder om:

<?php

  include('../connect/connect.php');

  $res = mysql_query("select * from aftaler") || die(mysql_error();
  $sorterings_array = array();
  while( $data = mysql_fetch_array( $res ) )
  {
    if ( $data['vare_nr'] != "" )
    {
        $sorterings_array = array_merge( $sorterings_array, explode( ",", $data['vare_nr'] ) );
    }
  }

  $sorteret_array = array_unique( $sorterings_array ); // fjerner dubletter fra $sorterings_array
  sort($sorteret_array);  // sorterer og giver array nye nøgler der starter med 0

  $oldLetter = '';
  $n = count($sorteret_array);
  for ( $s=0; $s < $n; $s++)
  {
    if ( $oldLetter != $sorteret_array[$s][0] )
    {
      $oldLetter = $sorteret_array[$s][0];
      echo "<br><b>" . $oldLetter . "</b>:<br>";
    }
    echo $s." ".$sorteret_array[$s]."<br>";
  }

?>
Avatar billede sthen Nybegynder
20. december 2004 - 01:11 #2
Ovenstående giver:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\inetpub\wwwroot\faellesindkob\afd\test4.php on line 7

efter at have rettet
$res = mysql_query("select * from aftaler") || die(mysql_error();
- til -
$res = mysql_query("select * from aftaler") || die(mysql_error());
Avatar billede sthen Nybegynder
20. december 2004 - 01:20 #3
Men du hjalp mig alligevel så meget på sporet, så denne fungerer:

<?php
include('../connect/connect.php');

($res = mysql_query("select * from aftaler")) || die(mysql_error());
while($data = mysql_fetch_array($res)) {
    if ($data['vare_nr']!=""){
        $alle = explode(",",$data['vare_nr']); 
        for ($i=0;$i<count($alle);$i++){
            $sorterings_array[] = $alle[$i];
        }
    }
}

$sorteret_array = array_unique ($sorterings_array); // fjerner dubletter fra $sorterings_array
sort($sorteret_array);  // sorterer og giver array nye nøgler der starter med 0





$oldLetter = '';
  $n = count($sorteret_array);
  for ( $s=0; $s < $n; $s++)
  {
    if ( $oldLetter != $sorteret_array[$s][0] )
    {
      $oldLetter = $sorteret_array[$s][0];
      echo "<br><b>" . $oldLetter . "</b>:<br>";
    }
    echo $s." ".$sorteret_array[$s]."<br>";
  }
?>

- derfor point alligevel
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester