/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Programmerings teknik.
Fra : Erik Hansen


Dato : 06-02-02 19:28

Hejsa.

Jeg har et spørgsmål som ikke kun henvender sig til PHP, men da jeg
roder med PHP og skal bruge det i PHP, vil jeg lige prøve her.

Det drejer sig om at jeg skal lave en hjemmeside i mit firma hvor alle
vores produkter skal kunne findes. Det er så sådan at mange af vores
produkter kan fåes i flere forskellige farver.

Det er meningen at informationer komme til at ligge i en database,
dv.s jeg vil bruge MySQL og PHP.

F.eks. hvis vi nu antager at vi har et stof, som kan fåes i farver,
rød, sort, grøn og blå, så vil jeg gener kunne definere disse farver i
bare et enkelt felt. Der findes ialt 15 forskellige farver, men det er
kun nogle af disse farver som vi benytter, og det er ikke altid de
samme farve for hver stoftype. Så for at slippe for at have 15 felter
i min database, vil det jo være nemt hvis jeg bare kan nøjes med et
enkelt, og det ved jeg det kan.

Det jeg vil gøre er at jeg giver hver af de 16 farver et tal, og ud
fra summen af disse tal, kan man beregne hvilken farver der benyttes.

f.eks.

Sort = 1
Brun = 2
Rød = 4
Orange = 8
Grøn = 16
Blå = 32

Har vi så et stof som vi lagerfører i farverne; sort, rød, og grøn,
giver det en sum på 21.

Når jeg så har tallet 21, kan jeg se at jeg kan trække 16 fra, dvs.
Grøn, herefter er der 5 tilbage, hvor 4 kan trækkes fra (Rød), og til
sidst er de 1 tilbage som så er Sort.

Mit spørgsmål er så, har denne teknik et navn.?

Et andet spørgsmål er, findes der en færdig funktion som kan lave en
analyze ud fra et tal, og på den måde give et resultat i hvilken
farver der kan leveres.? Jeg tænker på en slagt Array funktion.

Eller er mit tanke at jeg vil bruge en masse if sætninger.

Jeg har set denne teknik brugt i andre sammen hæng, f.eks. i
forbindelse med tildeling af rettigheder til bruger i et program.

....::Erik

 
 
Niels Andersen (06-02-2002)
Kommentar
Fra : Niels Andersen


Dato : 06-02-02 20:23

"Erik Hansen" <ehh@post1.tele.dk> wrote in message
news:u2s26uchkurjpm6giek65q0tfcv3kr9r9h@4ax.com...
> Sort = 1
> Brun = 2
> Rød = 4
> Orange = 8
> Grøn = 16
> Blå = 32
>
> Har vi så et stof som vi lagerfører i farverne; sort, rød, og grøn,
> giver det en sum på 21.
>
> Når jeg så har tallet 21, kan jeg se at jeg kan trække 16 fra, dvs.
> Grøn, herefter er der 5 tilbage, hvor 4 kan trækkes fra (Rød), og til
> sidst er de 1 tilbage som så er Sort.
>
> Mit spørgsmål er så, har denne teknik et navn.?
>
> Et andet spørgsmål er, findes der en færdig funktion som kan lave en
> analyze ud fra et tal, og på den måde give et resultat i hvilken
> farver der kan leveres.? Jeg tænker på en slagt Array funktion.

Hmm... Fik lige en tanke...

Hvis du kører din integer (fx. 21) gennem decbin() og så strrev(), så får du
nok en string, som er nem at parse.

Noget med:
$string = strrev(decbin(21));
if ($string[1]) echo "Sort<br>";
if ($string[2]) echo "Brun<br>";
if ($string[3]) echo "Rød"<br>";
....

Well, måske er det inspiration du kan arbejde videre med.
Bare en tanke, som du selv kan tænke lidt videre på, og se om det kan bruges
til noget. :)

--
Mvh.

Niels Andersen



Anders Johannsen (06-02-2002)
Kommentar
Fra : Anders Johannsen


Dato : 06-02-02 20:25

> Mit spørgsmål er så, har denne teknik et navn.?

Bitshifting. Om det er det mest hensigtsmæssige i denne forbindelse, skal
jeg lade være usagt.

PHP har dokumenteret funktionaliteten på
http://dk.php.net/manual/en/language.operators.bitwise.php

Nævnte operatører findes i stort set alle sprog, så der er mere fyldige
redegørelser at finde andetsteds. Brug Google.

/A



Arnulf Sortland (06-02-2002)
Kommentar
Fra : Arnulf Sortland


Dato : 06-02-02 21:35

Se også på MySQL datatypen SET
SET ('Sort','Brun', ...)

Arnulf
http://sa.no/


"Erik Hansen" <ehh@post1.tele.dk> wrote in message

> Sort = 1
> Brun = 2
> Rød = 4
> Orange = 8
> Grøn = 16
> Blå = 32
>
> Har vi så et stof som vi lagerfører i farverne; sort, rød, og grøn,
> giver det en sum på 21.
>
> Når jeg så har tallet 21, kan jeg se at jeg kan trække 16 fra, dvs.
> Grøn, herefter er der 5 tilbage, hvor 4 kan trækkes fra (Rød), og til
> sidst er de 1 tilbage som så er Sort.
>
> Mit spørgsmål er så, har denne teknik et navn.?




Erik Hansen (07-02-2002)
Kommentar
Fra : Erik Hansen


Dato : 07-02-02 19:43

Hej igen.

On Wed, 06 Feb 2002 20:35:03 GMT, in
dk.edb.internet.webdesign.serverside.php you wrote:

>Se også på MySQL datatypen SET
>SET ('Sort','Brun', ...)


Det virker lige som noget jeg kan bruge..

Tak til alle andre, som har svare i denne tråd. Jeg har fået meget ud
af det, og kan nu komme videre med mit projekt.

....::Erik


....::Erik

Thomas Lindgaard (07-02-2002)
Kommentar
Fra : Thomas Lindgaard


Dato : 07-02-02 01:31

Davs

> Det jeg vil gøre er at jeg giver hver af de 16 farver et tal, og ud
> fra summen af disse tal, kan man beregne hvilken farver der benyttes.
>
> f.eks.
>
> Sort = 1
> Brun = 2
> Rød = 4
> Orange = 8
> Grøn = 16
> Blå = 32
>
> Har vi så et stof som vi lagerfører i farverne; sort, rød, og grøn,
> giver det en sum på 21.
>
> Når jeg så har tallet 21, kan jeg se at jeg kan trække 16 fra, dvs.
> Grøn, herefter er der 5 tilbage, hvor 4 kan trækkes fra (Rød), og til
> sidst er de 1 tilbage som så er Sort.

Jeg bruger samme teknik til at bestemme brugerrettigheder med. Et flag i
databasen (en integer) sættes til noget alt efter, om brugeren er alm.
bruger, operator eller admin.

define("FLAG_DUMB_USER", 0x00000001);
define("FLAG_ADMIN_SYSTEM", 0x00000002);
define("FLAG_OPERATOR", 0x00000004);

En bruger kan være alle tre ting på een gang, så hans flag i databasen vil
være 1+2+4 = 7.

Følgende funktion undersøger om en bruger er administrator, hvis man kalder
den med is_admin(FLAG_ADMIN_SYSTEM):

function is_admin($flag)
{
return ( ($flag & FLAG_ADMIN_SYSTEM) == FLAG_ADMIN_SYSTEM );
}


> Et andet spørgsmål er, findes der en færdig funktion som kan lave en
> analyze ud fra et tal, og på den måde give et resultat i hvilken
> farver der kan leveres.? Jeg tænker på en slagt Array funktion.

Øhh... kunne du ikke bare lave en for-løkke, som tester potenser af to.

Lav en funktion:

function check_color($flag_from_db, $color)
{
return ( ($flag_from_db & $color) == $color );
}

Og gør noget i stil med følgende:

$available_colors = array();
$color_flag_to_check = noget fra databasen;
for ( $i = 0; $i < $num_colors; $i++ )
{
$current_color = pow(2, $i); // beregner den i'te potens af 2 (2^0 = 1 ~
sort, osv)

if ( check_color($color_flag_to_check, $current_color) )
{
$available_colors[$current_color] = "farve " .
map_flag_to_color($current_color) . " findes");
}
}

Nu vil $available_colors indeholde tekststrenge i indices svarende til de
tilgængelige farver, f.eks. hvis vi bruger dine flag (1 for sort, 4 for rød,
16 for grøn):

$available_colors = array(
1 => "farve sort findes",
4 => "farve rød findes",
16 => "farve grøn findes"
)


Hmm... det blev måske lidt rodet - håber du kan hitte ud af det... og håber
ikke du har for mange farver (2-potenser bliver jo ret hurtigt ret store :)

Mvh. Thomas (som ikke har testet koden)



Søg
Reklame
Statistik
Spørgsmål : 177506
Tips : 31968
Nyheder : 719565
Indlæg : 6408562
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste