/ 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
Hvordan checkes et tal flere gange tilbage
Fra : Kent Andersen


Dato : 25-07-01 15:23

Hej med jer!

For kort tid siden gik jeg i gang med PHP. Jeg har valgt at lave en simpel
madbase, der indeholder madforslag og intet andet, blot for at komme igang
med at lære.

Den skal give mig 5 forslag, hvor der ikke må være gentagelser.

Jeg har lavet min randomfunktion, men hvordan checker jeg at f.eks. post 5
ikke er den samme som post 1?

Hvis jeg skal lave et array, bestående af de 5 tal, hvordan kan jeg så
checke at to tal i samme array ikke er ens?


M.v.h.

Kent



 
 
Jacob Bunk Nielsen (25-07-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 25-07-01 15:52

"Kent Andersen" <kent.and@get2net.dk> writes:

> Hvis jeg skal lave et array, bestående af de 5 tal, hvordan kan jeg så
> checke at to tal i samme array ikke er ens?

Det letteste er nok at lave en contains-funktion i stil med:

function contains($x, $arr) {
for ($i=0; $i<count($arr); $i++) {
if ($arr[$i] == $x)
return true;
}
return false;
}

Så kan du for at vælge 5 tilfældige tal gøre:

$arr[0] = rand(0,$antal_opskrifter);
for ($i=1; $i<5; $i++) {
$tal = rand(0, $antal_opskrifter);
while (contains($tal, $arr)) {
$tal = rand(0,$antal_opskrifter);
}
$arr[$i] = $tal;
}

Det skulle gerne give dig 5 tilfældige til. Du skal dog passe på at du
har mere end 5 opskrifter, ellers vil det hænge

Der findes en masse array-funktioner i manualen, se
evt. <http://php.net/manual/en/function.array-filter.php>, men desværre synes
jeg ikke jeg kunne se en contains()-funktioner, men den var jo også
hurtigt skrevet

--
Jacob
If at first you do succeed, try to hide your astonishment.

http://www.bunk.cc - nu med Emacs effekt

Jacob Bunk Nielsen (25-07-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 25-07-01 15:55

Jacob Bunk Nielsen <spam@bunk.cc> writes:

> <http://php.net/manual/en/function.array-filter.php>

Skal selvfølgelig være: <http://php.net/manual/en/ref.array.php>.

--
Jacob
"VB Script kan jo næsten tales, præsis lige som svensk, det lyder nemt
nok, men når det kommer til stykket er man ganske hæmmet ..."
-- Ulrik Lunddahl i news:dk.edb.sysadmin

Morten Winther (25-07-2001)
Kommentar
Fra : Morten Winther


Dato : 25-07-01 16:30

> Det letteste er nok at lave en contains-funktion i stil med:
>
> function contains($x, $arr) {
> for ($i=0; $i<count($arr); $i++) {
> if ($arr[$i] == $x)
> return true;
> }
> return false;
> }

<snip>

> Der findes en masse array-funktioner i manualen, se
> evt. <http://php.net/manual/en/function.array-filter.php>, men desværre
synes
> jeg ikke jeg kunne se en contains()-funktioner, men den var jo også
> hurtigt skrevet

I php4 er der dog "in_array":

$os = array ("Mac", "NT", "Irix", "Linux");
if (in_array ("Irix", $os)){
print "Got Irix";
}

/ morten




Jacob Bunk Nielsen (25-07-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 25-07-01 16:46

"Morten Winther" <mw@get2net.dk> writes:

> > jeg ikke jeg kunne se en contains()-funktioner, men den var jo også
> > hurtigt skrevet
>
> I php4 er der dog "in_array":

Hurra for PHPs fantatiske navngivning! Mange af de andre
array-funktioner hedder array_etellerandet(), men ikke in_array, som
kunne/burde have heddet array_contains()

Jamen, så er den da lettere (og sikkert også hurtigere) at bruge end
den jeg skrev.

--
Jacob
Not better than sex but worth a try

http://www.bunk.cc - nu med Emacs effekt

Henrik Christensen (25-07-2001)
Kommentar
Fra : Henrik Christensen


Dato : 25-07-01 17:23

>Hvis jeg skal lave et array, bestående af de 5 tal, hvordan kan jeg så
>checke at to tal i samme array ikke er ens?

Prøv med array_rand http://php.net/array_rand

Mvh

HC

Jonas Delfs (25-07-2001)
Kommentar
Fra : Jonas Delfs


Dato : 25-07-01 17:31

"Henrik Christensen" <hc-news@post.cybercity.dk> skrev i en meddelelse
news:restltc748mgr7dtm22b7bv28rh4gvjpua@4ax.com...

> >Hvis jeg skal lave et array, bestående af de 5 tal, hvordan kan jeg så
> >checke at to tal i samme array ikke er ens?
>
> Prøv med array_rand http://php.net/array_rand

Sidst jeg tjekkede den funktion var den utroligt dårlig.
Det resultat den leverede var yderst ikke-tilfældigt. Det samme resultat
næsten hele tiden.

--
Mvh./Best Regards
Jonas Delfs, http://delfs.dk
e72bd3e51a7937c87d28b85d677a97b2



Jacob Bunk Nielsen (26-07-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 26-07-01 12:15

"Jonas Delfs" <jonas@nospam.delfs.dk> writes:

> > Prøv med array_rand http://php.net/array_rand
>
> Sidst jeg tjekkede den funktion var den utroligt dårlig.
> Det resultat den leverede var yderst ikke-tilfældigt. Det samme resultat
> næsten hele tiden.

Jeg har ikke selv prøvet den, så det er meget muligt du har ret, men
huskede du:

Don't forget to call srand() to seed the random number generator.

Så vidt jeg kan se er den funktion i øvrigt ikke brugbar for Kent, da
den ikke garanterer at der ikke kommer dupletter.

--
Jacob
Always remember that you are unique, just like everyone else.

http://www.bunk.cc - nu med Emacs effekt

Jonas Delfs (26-07-2001)
Kommentar
Fra : Jonas Delfs


Dato : 26-07-01 12:42

"Jacob Bunk Nielsen" <spam@bunk.cc> skrev i en meddelelse
news:m31yn49c1e.fsf@paven.bunk.cc...

> > > Prøv med array_rand http://php.net/array_rand
> >
> > Sidst jeg tjekkede den funktion var den utroligt dårlig.
> > Det resultat den leverede var yderst ikke-tilfældigt. Det samme resultat
> > næsten hele tiden.
>
> Jeg har ikke selv prøvet den, så det er meget muligt du har ret, men
> huskede du:
>
> Don't forget to call srand() to seed the random number generator.

Det kan jeg godt nok ikke huske - det er lang tid siden - men det kunne i
hvert fald resultere i mit problem hvis man glemte det.

> Så vidt jeg kan se er den funktion i øvrigt ikke brugbar for Kent, da
> den ikke garanterer at der ikke kommer dupletter.

Det var ikke mig der nævnte den i første omgang. :)

--
Mvh./Best Regards
Jonas Delfs, http://delfs.dk
e72bd3e51a7937c87d28b85d677a97b2



Henrik Christensen (26-07-2001)
Kommentar
Fra : Henrik Christensen


Dato : 26-07-01 15:47

>> Sidst jeg tjekkede den funktion var den utroligt dårlig.
>> Det resultat den leverede var yderst ikke-tilfældigt. Det samme resultat
>> næsten hele tiden.

Det ser ud til, at array_rand() virker på min test-server,
Windows 982 DK Apache 1.3.20 PHP 4.06

Hvis array_rand() ikke virker, så prøv med shuffle.
-----
mt_srand ((double)microtime()*1000000);
$test=array('a','b','c','d','e','f','g','h','i','j');
for ($y=1;$y<=25;$y++)
{
shuffle($test);
for($x=0;$x<5;$x++)
{
echo "$test[$x] ";
}
echo "<br>";
}
-----

>Så vidt jeg kan se er den funktion i øvrigt ikke brugbar for Kent, da
>den ikke garanterer at der ikke kommer dupletter.

Fordelen ved at bruge array_rand(),
er at der ikke kommer dubletter med.

Eks. vælg 9 bogstaver af 10 mulige.
-----
mt_srand ((double) microtime() * 1000000);
$test=array('a','b','c','d','e','f','g','h','i','j');
for ($y=1;$y<=25;$y++)
{
$t=array_rand($test,9);
sort($t);
foreach($t as $v)
{
echo "$test[$v] ";
}
echo "<br>";
}
-----
Mvh

HC

PS. Hvis der noget der svært for en computer,
så er det at lave helt tilfældige tal,


Jacob Bunk Nielsen (26-07-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 26-07-01 16:03

Henrik Christensen <hc-news@post.cybercity.dk> writes:

> >Så vidt jeg kan se er den funktion i øvrigt ikke brugbar for Kent, da
> >den ikke garanterer at der ikke kommer dupletter.
>
> Fordelen ved at bruge array_rand(),
> er at der ikke kommer dubletter med.

Ja, du har ret, så længe man giver den 2 argumenter. Jeg havde lige
overset det andet argument. For det vil naturligvis *ikke* virke, hvis
man laver:

for ($i=0; $i<5; $i++) {
$flaf = array_rand($arr);
print($flaf);
}

> PS. Hvis der noget der svært for en computer,
> så er det at lave helt tilfældige tal,

I know ... der er skrevet hele bøger om den slags

--
Jacob
Tech: "Oops" Client: "Oops!?" Tech: "Err.. nothing"

http://www.bunk.cc - nu med Emacs effekt

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408943
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste