Avatar billede zimes Nybegynder
13. juli 2008 - 10:02 Der er 8 kommentarer og
1 løsning

Gennemløb string og adskil elementer

Jeg har et table i min database hvor der i en tekst streng er gemt en række elementer adskilt af tegn. Det kunne fx se sådan her ud:

1&5;2&4;8&5;13&1;22&1;23&3;25&4;26&2;

Tallet før & angiver et ID og tallet efter angiver et antal. ; er tegnet der angiver slutningen for hvert element.

Jeg skal derfor have løbet strengen igennem så jeg kan bruge tallene hver for sig. Evt. i et array.

Har siddet og kigget på substr(), men kan ikke helt få mit hoved omkring det. Preg_match() ville jeg tro kunne være løsningen, men har slet ikke mentalt overskud til regulære udtryk lige pt.

Nogen snedige forslag?
Avatar billede supersquirrel Nybegynder
13. juli 2008 - 11:15 #1
Måske noget med split :

$string = "1&5;2&4;8&5;13&1;22&1;23&3;25&4;26&2;";
list($id,$numb) = split('[&;]', $string);
echo $id." og ".$numb;

Udskriver: 1 og 5
Hvordan du får den til at køre videre indtil der ikke er flere, ved jeg ikke lige
Avatar billede coderdk Praktikant
13. juli 2008 - 12:58 #2
$string = "1&5;2&4;8&5;13&1;22&1;23&3;25&4;26&2;";
$elems = explode( ";", $string );
foreach ( $elems as $e )
{
  list( $id, $num ) = explode( "&", $e );
  echo "$id: $num<br />";
}

?
Avatar billede zimes Nybegynder
13. juli 2008 - 13:40 #3
Har også siddet og leget med explode og foreach, men får et entry for meget til sidst pga. det sidste ;. Sigtede efter noget med to arrays med ID i det ene og antal i det andet, hvor de forskellige entries passede sammen. Altså noget med id[0] passer med antal[0] osv.

Har placeret mig i en svær situation med den løsning jeg har fået lavet, men nu har jeg data smidt i db, så bliver besværligt at ændre konstruktionen.
Avatar billede coderdk Praktikant
13. juli 2008 - 14:18 #4
prøv

$string = "1&5;2&4;8&5;13&1;22&1;23&3;25&4;26&2;";
$elems = explode( ";", $string );
foreach ( $elems as $e )
{
  if ( !empty( $e ) )
  {
    list( $id, $num ) = explode( "&", $e );
    echo "$id: $num<br />";
  }
}
Avatar billede coderdk Praktikant
13. juli 2008 - 14:18 #5
Eller måske

$string = "1&5;2&4;8&5;13&1;22&1;23&3;25&4;26&2;";
$elems = explode( ";", $string );
foreach ( $elems as $e )
{
  if ( list( $id, $num ) = explode( "&", $e ) )
  {
    echo "$id: $num<br />";
  }
}
Avatar billede coderdk Praktikant
13. juli 2008 - 14:19 #6
Hmm nej, glem den sidste :)
Avatar billede zimes Nybegynder
20. juli 2008 - 09:57 #7
Ja det splitter dem jo faktisk fint nok.
Jeg forsøger at få dem i hvert sit array, som beskrevet tidligere, men kan ikke rigtig gennemskue hvordan jeg skal få værdierne smidt ind, én efter én.
Avatar billede zimes Nybegynder
20. juli 2008 - 10:51 #8
Lige meget, det er mig der koger. Slamkode til undsætning.
Avatar billede coderdk Praktikant
20. juli 2008 - 13:36 #9
:D
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