Avatar billede mads1987 Nybegynder
23. august 2006 - 13:44 Der er 6 kommentarer og
1 løsning

Del variabel op ved linieskift, og skriv til mysql.

Hej,

Jeg ønsker et lidt specielt script som kan pille value ud for hver linie i denne variabel, og evt. ligge værdierne i et array, så de er klar til at blive skevet til mysql.

$var ="
<option value="value1">value1</option>
<option value="value2">value2</option>
<option value="value3">value3</option>
"

Vil altså resultere i
$arr[0] = value1;
$arr[1] = value2;
$arr[2] = value3;

Kan det overhoved lade sig gøre?
Avatar billede coderdk Praktikant
23. august 2006 - 13:50 #1
Kan gøre sådan:

    $var = '
        <option value="value1">value1</option>
        <option value="value2">value2</option>
        <option value="value3">value3</option>
        ';

    if ( preg_match_all( "#value=\"(.*?)\">#", $var, $m ) )
    {
        $arr = $m[1];
    }
Avatar billede coderdk Praktikant
23. august 2006 - 13:51 #2
Evt. se resultatet med:

echo "<pre>"; var_dump( $arr ); echo "</pre>";
Avatar billede mads1987 Nybegynder
23. august 2006 - 13:54 #3
Perfekt! Hvad gør denne preg_match_all( "#value=\"(.*?)\">#", $var, $m )  ??

Svar gerne
Avatar billede mads1987 Nybegynder
23. august 2006 - 13:59 #4
Har lidt problemer med at få dataerne ud hver for sig, prøver dette:

  <?
    $var = '
        <option value="value1">value1</option>
        <option value="value2">value2</option>
        <option value="value3">value3</option>
        <option value="value1">value1</option>
        ';

    $i =0;

    if ( preg_match_all( "#value=\"(.*?)\">#", $var, $m ) )
    {
        for ($i = 0; $i < $arr; $i++) {
            $arr = $m[$i];
            $tekst = $arr[$i];   
            echo "$tekst";
        }
    }
    ?>
Avatar billede coderdk Praktikant
23. august 2006 - 14:22 #5
preg_* funktionerne er PCRE - Perl Compatible Regular Expressions
http://google.com/search?q=regular+expressions+tutorial
http://dk.php.net/pcre
http://dk.php.net/preg_match
http://dk.php.net/preg_match_all
http://dk.php.net/preg_replace

Se også pattern modifiers og syntax under en af dem

i "#value=\"(.*?)\">#" er # afgrænseren, altså vi er kun interesserede i dette område. (.*?) er det som vi gerne vil hive ud . er "any char" * er 0 eller flere ? gør at den kun tager indtil den næste "

Prøv med:

    if ( preg_match_all( "#value=\"(.*?)\">#", $var, $m ) )
    {
        $arr = $m[1];
        foreach ( $arr as $val )
        {
            echo "$val";
        }
    }

Var det dette du var ude efter? Du kan også bruge alm. for:


    if ( preg_match_all( "#value=\"(.*?)\">#", $var, $m ) )
    {
        $arr = $m[1];
        $n = count( $arr );
        for ( $i = 0; $i < $n; $i++ )
        {
            echo $arr[$i];
        }
    }
Avatar billede mads1987 Nybegynder
28. august 2006 - 12:26 #6
Tak skal du have coderdk, det er præcis hvad jeg manglede. Svar gerne.
Avatar billede coderdk Praktikant
28. august 2006 - 13:08 #7
Ok :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

IT-JOB