Avatar billede Slettet bruger
29. december 2005 - 16:41 Der er 18 kommentarer og
1 løsning

Checke om variabel indeholde en værdi

Hej

Hvis jeg har en variabel der ser således ud:

$test = "5¤2¤11";

Hvordan kontrollerer jeg om den indeholder forskellige værdier.

Jeg henter alle id'er fra en tabel (dvs. typisk fra 1 og opefter).

Hvordan checker jeg om min variabel indeholder f.eks. værdien "1".

Jeg har forsøgt, men da 11 indeholder 1, vil den finde den, selvom værdien ikke er i variablen.
Avatar billede udvikler Nybegynder
29. december 2005 - 16:50 #1
Er det ikke bare

if ($test == 1) {
echo "den indeholder tallet 1";
}else{
echo "Den indeholder ikke tallet 1";
}
Avatar billede Slettet bruger
29. december 2005 - 16:50 #2
Så vil den også melde at den indeholder tallet 1, selvom variablen indeholder tallet 11.
Avatar billede plazm Nybegynder
29. december 2005 - 16:53 #3
Avatar billede Slettet bruger
29. december 2005 - 17:00 #4
plazm...> Det fungerer, men desværre ikke til det jeg skal bruge det til. Problemet er en smule forenklet.

Jeg har en løkke der henter noget ud af en database. Såfremt id'en fra den enkelte post er med i variablen der gøres ét, er den ikke med i variablen skal der gøres noget andet.

I pricippet kan variablen indeholder flere hundrede værdier, og skal den rendes igennem for hver post i databasen vil det blive omstændigt.
Avatar billede erikjacobsen Ekspert
29. december 2005 - 17:02 #5
Hvorfor er $test ikke et array?
Avatar billede Slettet bruger
29. december 2005 - 17:05 #6
erikjacobsen....>
Jeg har en side med en form. I denne form vælges en masse "grupper" i en select-box.

Værdierne samles i en variabel og sendes til en validerings-side, sammen med en masse andet data fra formen.

Er der fejl i indtastningerne sendes værdierne tilbage til form-siden, sammen med fejl-besked.

Når siden skal vises igen, skal jeg have værdierne fra variablen (hvert tal repræsenterer et id i en database) "oversat" til min select-form igen.
Avatar billede plazm Nybegynder
29. december 2005 - 17:05 #7
erik, tænkte jeg faktisk også, men nu har jeg opdateret min side, kik igen
http://plazm.dk/exp
Avatar billede Slettet bruger
29. december 2005 - 17:07 #8
plazm...> Virker næsten efter hensigten, dog vil den ikke virke hvis 11 står først i variablen...
Avatar billede plazm Nybegynder
29. december 2005 - 17:08 #9
sådan, en mindre fejl, hvis der var flere af samme.
Avatar billede Slettet bruger
29. december 2005 - 17:09 #10
Det ser rigtig ud.

Hvordan kan jeg flette det ind i min sql-løkke:

            while ($row_groups = mysql_fetch_assoc($query_groups))
              {
                $group_name = $row_groups['name'];
                $group_id  = $row_groups['id'];

                if $group_id findes i variabel
                  {
                    $user_group_not_selected .= ("<option value=\"$group_id\">$group_name</option>");
                  }
                else
                  {
                    $user_group_selected .= ("<option value=\"$group_id\">$group_name</option>");
                  }
              }
Avatar billede plazm Nybegynder
29. december 2005 - 17:11 #11
function iarray($array,$sep,$needle) {
    $array = explode($sep, $array);
    $needles = array_keys($array, $needle);
    return (count($needles) > 0)?True:False;
  }
            while ($row_groups = mysql_fetch_assoc($query_groups))
              {
                $group_name = $row_groups['name'];
                $group_id  = $row_groups['id'];

                if (iarray($test,'¤',$group_id))
                  {
                    $user_group_not_selected .= ("<option value=\"$group_id\">$group_name</option>");
                  }
                else
                  {
                    $user_group_selected .= ("<option value=\"$group_id\">$group_name</option>");
                  }
              }
Avatar billede erikjacobsen Ekspert
29. december 2005 - 17:14 #12
Jo, men så lav den til et array, een gang for alle på siden, og brug http://php.net/in_array
Avatar billede plazm Nybegynder
29. december 2005 - 17:15 #13
heh, det er rigtigt, sad bare lige med array_keys i hånden, til et foregående spørgsmål, og hvis du "kun" har en hammer, så ligner alle problemer jo et søm :)
Avatar billede Slettet bruger
29. december 2005 - 17:16 #14
erikjacobsen....> Det må jeg lige overveje, der er pænt meget der skal rettes.

plazm...> Tak for hjælpen. Point på vej.
Avatar billede plazm Nybegynder
29. december 2005 - 17:17 #15
function iarray($array,$sep,$needle) {
    $array = explode($sep, $array);
    return in_array($needle, $array);
  }
            while ($row_groups = mysql_fetch_assoc($query_groups))
              {
                $group_name = $row_groups['name'];
                $group_id  = $row_groups['id'];

                if (iarray($test,'¤',$group_id))
                  {
                    $user_group_not_selected .= ("<option value=\"$group_id\">$group_name</option>");
                  }
                else
                  {
                    $user_group_selected .= ("<option value=\"$group_id\">$group_name</option>");
                  }
              }
Avatar billede Slettet bruger
29. december 2005 - 17:25 #16
I mit tilfælde er der ikke noget sparet ved at lave det om til er array, idet jeg bare skal gennemløbe array'et for hver post i databasen.

Tror det vil være smartere at lave noget reg.exp. Så skal der ikke explodes for hver eneste post i databasen.
Avatar billede plazm Nybegynder
29. december 2005 - 18:27 #17
$test = explode('¤', $test);


            while ($row_groups = mysql_fetch_assoc($query_groups))
              {
                $group_name = $row_groups['name'];
                $group_id  = $row_groups['id'];

                if (in_array($group_id, $test))
                  {
                    $user_group_not_selected .= ("<option value=\"$group_id\">$group_name</option>");
                  }
                else
                  {
                    $user_group_selected .= ("<option value=\"$group_id\">$group_name</option>");
                  }
              }
Avatar billede erikjacobsen Ekspert
29. december 2005 - 18:34 #18
Hvis der ikke er synderligt mange værdier i array-et (10-20 stykker), er plazm 18:27:04 den bedste løsning jeg kan foreslå.
Avatar billede Slettet bruger
30. december 2005 - 01:47 #19
Kan godt se at den sidste udgave er stort set det samme som den jeg har fået hjælp til i et andet spørgsmål:

$test = "2¤3¤4¤5¤6¤7¤8¤9¤10¤11¤110¤1110¤101";
$num = 1;

$reg = "/^" . $num . "¤|¤" . $num . "¤|¤" . $num . "$/";

while ($row_groups = mysql_fetch_assoc($query_groups))
  {
    $group_name = $row_groups['name'];
    $group_id  = $row_groups['id'];

    if(preg_match($reg,$test))
      {
        $user_group_not_selected .= ("<option value=\"$group_id\">$group_name</option>");
      }
    else
      {
        $user_group_selected .= ("<option value=\"$group_id\">$group_name</option>");
      }
  }
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