|
| 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)
| |
|
|