/ 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
Hive variabler ud af for-loop
Fra : Mille Jacobsen


Dato : 25-02-07 20:35

Jeg har en fil ("bingo.txt") med et ord på hver linie.
Det behandler jeg sådan:

for($i=1; $i<5; $i++)
{
$hent= file("bingo.txt");
srand ((float) microtime() * 10000000);
$ord = array_rand($hent);
$b=$hent[$ord];
echo $b;
}

Det giver et output med fire tilfældige ord. Det virker fint.

Men jeg vil gerne have de fire tilfældige ord trukket ud i fire
forskellige variabler så jeg kan hente dem udenfor løkken med:

echo $b1;
echo $b2;
echo $b3;
echo $b4;

Men hvordan gør jeg det?
/Mille


 
 
René Lønstrup (25-02-2007)
Kommentar
Fra : René Lønstrup


Dato : 25-02-07 23:23

Mille Jacobsen wrote:
<SNIP>
> Men jeg vil gerne have de fire tilfældige ord trukket ud i fire
> forskellige variabler så jeg kan hente dem udenfor løkken med:
>
> echo $b1;
> echo $b2;
> echo $b3;
> echo $b4;
>
> Men hvordan gør jeg det?

Jeg ville smide dem i et array i stedet for fire seperate variabler:

$b = array();
for($i=0; $i<4; $i++)
{
$hent= file("bingo.txt");
srand ((float) microtime() * 10000000);
$ord = array_rand($hent);
$b[$i] = $hent[$ord];
echo $b[$i];
}

Og så efterfølgende hente dem via index:
echo $b[1]; // udskriver ord #2 da array-index er nul-baseret (0, 1, 2 osv)


--
Mvh René Lønstrup
web: http://rene.loenstrup.net?r=usenet
email: se om du kan regne den ud..



Michael Zedeler (25-02-2007)
Kommentar
Fra : Michael Zedeler


Dato : 25-02-07 23:59

Mille Jacobsen skrev:
> Jeg har en fil ("bingo.txt") med et ord på hver linie.
> Det behandler jeg sådan:
>
> for($i=1; $i<5; $i++)
> {
> $hent= file("bingo.txt");
Argh.

Der henter du godt nok filen ind - en gang for hver gang løkken køres.
Hvis du vil have 4 tilfældige værdier fra filen, læses filen fra ende
til anden 4 gange. Vil du have 1.000 værdier, læses den 1.000 gange.

Løsning: flyt denne linie udenfor løkken.

> srand ((float) microtime() * 10000000);

Denne her hører også til udenfor løkken.

> $ord = array_rand($hent);
> $b=$hent[$ord];
> echo $b;
> }
>
> Det giver et output med fire tilfældige ord. Det virker fint.

Ja, men det er temmelig kluntet.

> Men jeg vil gerne have de fire tilfældige ord trukket ud i fire
> forskellige variabler så jeg kan hente dem udenfor løkken med:
>
> echo $b1;
> echo $b2;
> echo $b3;
> echo $b4;

Nu er det sådan at array_rand kan hente vilkårligt mange værdier ud i ét
hug. Se manualen:

array_rand() is rather useful when you want to pick one or more random
entries out of an array. It takes an input array and an optional
argument num_req which specifies how many entries you want to pick - if
not specified, it defaults to 1.

http://dk2.php.net/manual/en/function.array-rand.php

Så det bliver til:

$b = array_rand(file("bingo.txt"), 5);

echo $b[1];
echo $b[2];
echo $b[3];
echo $b[4];
echo $b[5];

Ikke testet.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Arne Feldborg (26-02-2007)
Kommentar
Fra : Arne Feldborg


Dato : 26-02-07 23:15

Michael Zedeler <michael@zedeler.dk> skrev Sun, 25 Feb 2007 23:59:06
+0100


>$b = array_rand(file("bingo.txt"), 5);
>
>echo $b[1];
>echo $b[2];
>echo $b[3];
>echo $b[4];
>echo $b[5];
>
$hent= file("bingo.txt");
$b = array_rand($hent,5);

echo $hent[$b[1]];
echo $hent[$b[2]];
echo $hent[$b[3]];
echo $hent[$b[4]];
echo $hent[$b[5]];

--
mvh, A:\Feldborg

Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

Mille Jacobsen (26-02-2007)
Kommentar
Fra : Mille Jacobsen


Dato : 26-02-07 15:43

On 25 Feb., 23:59, Michael Zedeler <mich...@zedeler.dk> wrote:
>
> Ikke testet.
>
> Mvh. Michael.

On 25 Feb., 23:59, Michael Zedeler <mich...@zedeler.dk> wrote:

> Ikke testet.
>

Jeg prøvede at skrive:


$b = array_rand(file("bingo.txt"), 5);


echo $b[1];
echo $b[2];
echo $b[3];
echo $b[4];
echo $b[5];

Det giver fem tilfældige TAL istedet..
Ikke lige det jeg søgte.


Michael Zedeler (26-02-2007)
Kommentar
Fra : Michael Zedeler


Dato : 26-02-07 21:26

Mille Jacobsen skrev:
> On 25 Feb., 23:59, Michael Zedeler <mich...@zedeler.dk> wrote:
>> Ikke testet.
>>
>> Mvh. Michael.
>
> On 25 Feb., 23:59, Michael Zedeler <mich...@zedeler.dk> wrote:
>
>> Ikke testet.
>>
>
> Jeg prøvede at skrive:
>
>
> $b = array_rand(file("bingo.txt"), 5);
>
>
> echo $b[1];
> echo $b[2];
> echo $b[3];
> echo $b[4];
> echo $b[5];
>
> Det giver fem tilfældige TAL istedet..
> Ikke lige det jeg søgte.

Endnu en gang er jeg blevet mindet om hvor tåbeligt PHP kan være.

Du kan muligvis slippe afsted med

$b = array_rand(array_flip(file("bingo.txt")), 5);

Men ellers vil jeg anbefale at du finder et andet sprog. Nærmest hvad
som helst.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Arne Feldborg (26-02-2007)
Kommentar
Fra : Arne Feldborg


Dato : 26-02-07 22:57

Michael Zedeler <michael@zedeler.dk> skrev Mon, 26 Feb 2007 21:25:44
+0100

>Endnu en gang er jeg blevet mindet om hvor tåbeligt PHP kan være.
>
Det er da noget vrøvl at skrive, bare fordi du foreslår noget andet end
det manualen tilsiger.

I eksemplet gør PHP lige præcist det den i følge manualen skal, nemlig
returnerer 5 *nøgler* ikke 5 værdier.


--
mvh, A:\Feldborg

Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

Michael Zedeler (26-02-2007)
Kommentar
Fra : Michael Zedeler


Dato : 26-02-07 23:07

Arne Feldborg skrev:
> Michael Zedeler <michael@zedeler.dk> skrev Mon, 26 Feb 2007 21:25:44
> +0100
>
>> Endnu en gang er jeg blevet mindet om hvor tåbeligt PHP kan være.
>>
> Det er da noget vrøvl at skrive, bare fordi du foreslår noget andet end
> det manualen tilsiger.

Jeg har skam læst manualen og jeg synes stadigvæk at funktionen opfører
sig tåbeligt.

> I eksemplet gør PHP lige præcist det den i følge manualen skal, nemlig
> returnerer 5 *nøgler* ikke 5 værdier.

Ja. Jeg har skam læst manualen. Kan du så finde den funktion der lige
hiver de værdier ud, man pænt har fået leveret nøgler til? Så vidt jeg
kan se findes den ikke, så man er nødt til at skrive en løkke.

Jeg ser det som dårligt håndværk når man laver et sprog der har nogle
unødigt komplekse funktioner og samtidig undlader at have de basale
funktioner på plads. Hvis man kender notation som @a[ 3 .. 7 ] fra perl,
er array_slice nærmest stenalderteknologi ved siden af.

Beklager at jeg nærmest har startet en lille religionskrig her i
PHP-gruppen. Fremover vil jeg hjælpe og bide irritationen i mig i
stilhed

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Arne Feldborg (26-02-2007)
Kommentar
Fra : Arne Feldborg


Dato : 26-02-07 23:33

Michael Zedeler <michael@zedeler.dk> skrev Mon, 26 Feb 2007 23:06:49
+0100


>Jeg har skam læst manualen og jeg synes stadigvæk at funktionen opfører
>sig tåbeligt.
>
Det viser dit eksempel jo tydeligt at du ikke har, omend du selv bringer
et link til den.

>Ja. Jeg har skam læst manualen. Kan du så finde den funktion der lige
>hiver de værdier ud, man pænt har fået leveret nøgler til? Så vidt jeg
>kan se findes den ikke, så man er nødt til at skrive en løkke.
>
Du har stadigvæk ikke forstået opgaven. Som udgangspunkt kan man ikke
vide om det er nøglernes navne eller deres værdier folk vil have
fundet.

Fidusen med Array_Rand er at man får nøglerne leveret på et sølvfad, og
med dem i hånden kan man altid finde indholdet, hvis det nu er det man
har brug for - hvorimod det omvendte ikke nødvenidivis altid er lige så
let.

>Jeg ser det som dårligt håndværk når man laver et sprog der har nogle
>unødigt komplekse funktioner og samtidig undlader at have de basale
>funktioner på plads. Hvis man kender notation som @a[ 3 .. 7 ] fra perl,
>er array_slice nærmest stenalderteknologi ved siden af.
>
Stenalderteknologi = teknologi man ikke selv forstår.?

Jeg ser ingen grund til at bruge array_slice i den her situation. Og
iøvrigt har jeg bragt et eksempel i et andet indlæg. Og det kunne såmænd
godt skrives endnu kortere.



--
mvh, A:\Feldborg

Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

Michael Zedeler (27-02-2007)
Kommentar
Fra : Michael Zedeler


Dato : 27-02-07 08:20

Arne Feldborg skrev:
> Michael Zedeler <michael@zedeler.dk> skrev Mon, 26 Feb 2007 23:06:49
> +0100
>
>> Jeg har skam læst manualen og jeg synes stadigvæk at funktionen opfører
>> sig tåbeligt.
>>
> Det viser dit eksempel jo tydeligt at du ikke har, omend du selv bringer
> et link til den.

Jeg læste den efter at Mille skrev at det ikke virkede.

>> Ja. Jeg har skam læst manualen. Kan du så finde den funktion der lige
>> hiver de værdier ud, man pænt har fået leveret nøgler til? Så vidt jeg
>> kan se findes den ikke, så man er nødt til at skrive en løkke.
>>
> Du har stadigvæk ikke forstået opgaven. Som udgangspunkt kan man ikke
> vide om det er nøglernes navne eller deres værdier folk vil have
> fundet.
>
> Fidusen med Array_Rand er at man får nøglerne leveret på et sølvfad, og
> med dem i hånden kan man altid finde indholdet, hvis det nu er det man
> har brug for - hvorimod det omvendte ikke nødvenidivis altid er lige så
> let.

Ja. Og så kan man så kaste sig ud i at hive værdierne ud, men hvor er
lige funktionen til det? Jeg synes det er oplagt at der skal være en
funktion der opfører sig sådan her:

$a = array(1 => "a", 2 => "b", 3 => "c")
$b = array(2, 3)

$c = array_get_values($a, $b);

Nu er $c == ("b", "c"),

Det kan godt være at den er der, men jeg kunne ikke finde den.

Endnu bedre - det burde være indlejret direkte i sprogets syntaks, frem
for at man skal kalde kluntede funktioner.

>> Jeg ser det som dårligt håndværk når man laver et sprog der har nogle
>> unødigt komplekse funktioner og samtidig undlader at have de basale
>> funktioner på plads. Hvis man kender notation som @a[ 3 .. 7 ] fra perl,
>> er array_slice nærmest stenalderteknologi ved siden af.
>>
> Stenalderteknologi = teknologi man ikke selv forstår.?

Jeg har skam læst og forstået manual-siden efter Mille skrev at det ikke
virkede som forventet.

> Jeg ser ingen grund til at bruge array_slice i den her situation. Og
> iøvrigt har jeg bragt et eksempel i et andet indlæg. Og det kunne såmænd
> godt skrives endnu kortere.

Min kommentar til array_slice er blot et eksempel på en funktion, der -
hvis man havde tænkt sig lidt bedre om - havde kunnet det jeg
efterlyser. Men nej.

Og for lige at vende tilbage til den med stenalderteknologien: hvis
flinteøkser er det mest avancerede, amn kender, kan det godt være svært
at forstå folk der efterlyser en motorsav.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Arne Feldborg (27-02-2007)
Kommentar
Fra : Arne Feldborg


Dato : 27-02-07 09:50

Michael Zedeler <michael@zedeler.dk> skrev Tue, 27 Feb 2007 08:20:15
+0100


>> Fidusen med Array_Rand er at man får nøglerne leveret på et sølvfad, og
>> med dem i hånden kan man altid finde indholdet, hvis det nu er det man
>> har brug for - hvorimod det omvendte ikke nødvenidivis altid er lige så
>> let.
>
>Ja. Og så kan man så kaste sig ud i at hive værdierne ud, men hvor er
>lige funktionen til det?
>
Det virker som du med vold og magt vil have teksten placeret i $b, men
hvorfor dog det. Teksten ligger jo allerede og hygger sig i $hent og har
det godt der.

I $b har du så de tilfældigt udvalgte nøgler du skal bruge for at
præsentere teksten.

Det betyder at du stadigvæk har hele den oprindelige tekst til rådighed,
det ville du ikke have i dit eget eksempel (selvom det havde virkert).

Og mere væsentligt, du kan ryste posen og lave eny udtrækning uden at
genindlæse filen, det ville du ikke kunne i dit eget eksempel (selvom
det havde virket).

Du skal også være opmærksom på, at du jo ikke kan vide om nøglerne er
forløbende mummererde, eller om de ligger i en anden rækkefølge. Ja du
kan end ikke på forhånd vide om de overhovedet er nummererede, eller om
de har navne. Men array_rand() vil uanset dette virker korrekt i alle
tilfælde - det ville dit eksempel næppe (selvom det havde virket).


>Jeg synes det er oplagt at der skal være en
>funktion der opfører sig sådan her:
>
Aldrig hørt om flerdimmensionelle arrays?

echo $hent[$b[1]];

as simple as that.!


>Endnu bedre - det burde være indlejret direkte i sprogets syntaks, frem
>for at man skal kalde kluntede funktioner.
>
Bare fordi du ikke forstår funktionen behøver den jo ikke at være
kluntet. Den er faktisk noget mere elegant end det du selv foreslår.

>> Stenalderteknologi = teknologi man ikke selv forstår.?
>
>Jeg har skam læst og forstået manual-siden efter Mille skrev at det ikke
>virkede som forventet.
>
Det havde sikkert været en glimragende ide at læse den før du postede
dit forslag. Især da når du prøver at spille bedreviddene om ting du
tydeligvis ikke har sat dig ordentligt ind i.

--
mvh, A:\Feldborg

Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

Michael Zedeler (27-02-2007)
Kommentar
Fra : Michael Zedeler


Dato : 27-02-07 20:06

Arne Feldborg skrev:
> Michael Zedeler <michael@zedeler.dk> skrev Tue, 27 Feb 2007 08:20:15
> +0100
>
>
>>> Fidusen med Array_Rand er at man får nøglerne leveret på et sølvfad, og
>>> med dem i hånden kan man altid finde indholdet, hvis det nu er det man
>>> har brug for - hvorimod det omvendte ikke nødvenidivis altid er lige så
>>> let.
>> Ja. Og så kan man så kaste sig ud i at hive værdierne ud, men hvor er
>> lige funktionen til det?
>>
> Det virker som du med vold og magt vil have teksten placeret i $b, men
> hvorfor dog det. Teksten ligger jo allerede og hygger sig i $hent og har
> det godt der.
>
> I $b har du så de tilfældigt udvalgte nøgler du skal bruge for at
> præsentere teksten.
>
> Det betyder at du stadigvæk har hele den oprindelige tekst til rådighed,
> det ville du ikke have i dit eget eksempel (selvom det havde virkert).
>
> Og mere væsentligt, du kan ryste posen og lave eny udtrækning uden at
> genindlæse filen, det ville du ikke kunne i dit eget eksempel (selvom
> det havde virket).
>
> Du skal også være opmærksom på, at du jo ikke kan vide om nøglerne er
> forløbende mummererde, eller om de ligger i en anden rækkefølge. Ja du
> kan end ikke på forhånd vide om de overhovedet er nummererede, eller om
> de har navne. Men array_rand() vil uanset dette virker korrekt i alle
> tilfælde - det ville dit eksempel næppe (selvom det havde virket).

Ja. Der er så mange ting, man kunne forestille sig, men det var bare
ikke det, opgaven gik ud på.

>> Jeg synes det er oplagt at der skal være en
>> funktion der opfører sig sådan her:
>>
> Aldrig hørt om flerdimmensionelle arrays?
>
> echo $hent[$b[1]];
>
> as simple as that.!

Jeg gider ikke mere. Lad os bare beslutte at PHP er et smukt og æstetisk
sprog uden nogen som helst skavanker eller designfejl.

>> Endnu bedre - det burde være indlejret direkte i sprogets syntaks, frem
>> for at man skal kalde kluntede funktioner.
>>
> Bare fordi du ikke forstår funktionen behøver den jo ikke at være
> kluntet. Den er faktisk noget mere elegant end det du selv foreslår.

Nu er du endda holdt op med at læse hvad jeg skriver. Så vil jeg gøre
det samme med resten af dit indlæg.

Sov godt. Når du når dertil.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Arne Feldborg (27-02-2007)
Kommentar
Fra : Arne Feldborg


Dato : 27-02-07 21:29

Michael Zedeler <michael@zedeler.dk> skrev Tue, 27 Feb 2007 20:05:49
+0100

>
>> Du skal også være opmærksom på, at du jo ikke kan vide om nøglerne er
>> forløbende mummererde, eller om de ligger i en anden rækkefølge. Ja du
>> kan end ikke på forhånd vide om de overhovedet er nummererede, eller om
>> de har navne. Men array_rand() vil uanset dette virker korrekt i alle
>> tilfælde - det ville dit eksempel næppe (selvom det havde virket).
>
>Ja. Der er så mange ting, man kunne forestille sig, men det var bare
>ikke det, opgaven gik ud på.
>
Jo. det *er* en del af den opgave array_rand skal kunne håndtere. Og det
ville den ikke kunne, hvis den opførte sig sådan som du mener den burde.

Den funktion du mener der mangler ville i virkeligheden bare være en
ekstra omvej, idet den reeelt allerede er udført når arrray_rand() har
været kørt. Så ligger de udtrukne værdier allerede klar i et array på
formen $hent[$b[$i]] og så fremdeles.

Så er der jo ingen grund til at gå en ekstra omvej for det. Det eneste
problem er at arayet hedder noget andet end det du havde forventet, og
måske er lidt mere avanceret end du er vant til..


>Jeg gider ikke mere. Lad os bare beslutte at PHP er et smukt og æstetisk
>sprog uden nogen som helst skavanker eller designfejl.
>
Tjo. Hvis man ikke kan argumentere for egne synspunkter - så kan man jo
altid forsøge at overeksponere og latterliggøre det modsatte synspunkt.


--
mvh, A:\Feldborg

Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

Michael Zedeler (28-02-2007)
Kommentar
Fra : Michael Zedeler


Dato : 28-02-07 00:28

Arne Feldborg skrev:
> Michael Zedeler <michael@zedeler.dk> skrev Tue, 27 Feb 2007 20:05:49
> +0100

>> Jeg gider ikke mere. Lad os bare beslutte at PHP er et smukt og æstetisk
>> sprog uden nogen som helst skavanker eller designfejl.
>>
> Tjo. Hvis man ikke kan argumentere for egne synspunkter - så kan man jo
> altid forsøge at overeksponere og latterliggøre det modsatte synspunkt.

Man kan også svare på noget andet, end det den anden part skriver. Hvis
du gad at læse mit indlæg kunne vi have ført diskussionen videre, men
det ser ikke ud til at være tilfældet, så det slutter her.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Arne Feldborg (28-02-2007)
Kommentar
Fra : Arne Feldborg


Dato : 28-02-07 00:58

Michael Zedeler <michael@zedeler.dk> skrev Wed, 28 Feb 2007 00:27:34
+0100

>du gad at læse mit indlæg kunne vi have ført diskussionen videre, men
>
Jeg har skam da læst det du skriver::

>Endnu en gang er jeg blevet mindet om hvor tåbeligt PHP kan være.

>Men ellers vil jeg anbefale at du finder et andet sprog. Nærmest hvad
>som helst.

>jeg synes stadigvæk at funktionen opfører sig tåbeligt.

>Jeg ser det som dårligt håndværk når man laver et sprog der har nogle

>er array_slice nærmest stenalderteknologi ved siden af.

>Fremover vil jeg hjælpe og bide irritationen i mig i
>stilhed

>frem for at man skal kalde kluntede funktioner.

>Og for lige at vende tilbage til den med stenalderteknologien: hvis
>flinteøkser er det mest avancerede, amn kender

>hvis man havde tænkt sig lidt bedre om - havde kunnet det jeg
>efterlyser. Men nej.
>

Det kunne så være hvad det være vil, og kunne iøvrigt være et helt
legalt synspunkt, hvis det var baseret på et rimeligt godt kendskab til
PHP, men det har du jo tydeligvis ikke.


--
mvh, A:\Feldborg

Slægtsforskning og lokalhistorie i midt- vestjylland
http://hammerum-herred.dk/

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

Månedens bedste
Årets bedste
Sidste års bedste