/ 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
Tilfældig rækkefølge i array
Fra : Kim Ludvigsen


Dato : 03-09-08 21:15

Jeg har en række filnavne i et array som er indlæst ved
hjælp af glob(). Jeg vil gerne have udskrevet filnavnene i
en anden rækkefølge end den de ligger i i arrayet, hvordan
gør jeg det?

Min nuværende kode:

foreach (glob("*.txt") as $filename) {
include "$filename";
}

--
Mvh. Kim Ludvigsen
Få styr på irriterende hjemmesider ved at bruge aktive
bogmærker.
http://kimludvigsen.dk

 
 
Birger Sørensen (03-09-2008)
Kommentar
Fra : Birger Sørensen


Dato : 03-09-08 21:20

Følgende er skrevet af Kim Ludvigsen:
> Jeg har en række filnavne i et array som er indlæst ved hjælp af glob(). Jeg
> vil gerne have udskrevet filnavnene i en anden rækkefølge end den de ligger i
> i arrayet, hvordan gør jeg det?
>
> Min nuværende kode:
>
> foreach (glob("*.txt") as $filename) {
> include "$filename";
> }

"i en anden rækkefølge" er temmelig uspecificeret...
http://dk.php.net/manual/en/function.sort.php
der er en hel stribe funktioner til at sortere arrays med, nederst...

Birger



Kim Ludvigsen (03-09-2008)
Kommentar
Fra : Kim Ludvigsen


Dato : 03-09-08 21:46

Birger Sørensen skrev:
> Følgende er skrevet af Kim Ludvigsen:
>> Jeg har en række filnavne i et array som er indlæst ved hjælp af
>> glob(). Jeg vil gerne have udskrevet filnavnene i en anden rækkefølge
>> end den de ligger i i arrayet, hvordan gør jeg det?
>
> "i en anden rækkefølge" er temmelig uspecificeret...

Ok: i tilfældig rækkefølge.

> http://dk.php.net/manual/en/function.sort.php
> der er en hel stribe funktioner til at sortere arrays med, nederst...

Problemet er, at jeg ikke vil have filnavnene sorteret efter
et bestemt kriterium som filnavn, -størrelse eller ændringstid.

--
Mvh. Kim Ludvigsen
Beskyt dine data med stærk kryptering - velegnet til bærbare
computere og USB-nøgler.
http://kimludvigsen.dk

Birger Sørensen (03-09-2008)
Kommentar
Fra : Birger Sørensen


Dato : 03-09-08 21:55

Kim Ludvigsen sendte dette med sin computer:
> Birger Sørensen skrev:
>> Følgende er skrevet af Kim Ludvigsen:
>>> Jeg har en række filnavne i et array som er indlæst ved hjælp af glob().
>>> Jeg vil gerne have udskrevet filnavnene i en anden rækkefølge end den de
>>> ligger i i arrayet, hvordan gør jeg det?
>>
>> "i en anden rækkefølge" er temmelig uspecificeret...
>
> Ok: i tilfældig rækkefølge.
>
>> http://dk.php.net/manual/en/function.sort.php
>> der er en hel stribe funktioner til at sortere arrays med, nederst...
>
> Problemet er, at jeg ikke vil have filnavnene sorteret efter et bestemt
> kriterium som filnavn, -størrelse eller ændringstid.

Tilfældig udtrækning, uden tilbagelægning...
loop
Generer et tilfældigt tal >= 0 og < længen af arrayet
idtræk efter index
slet elementet fra arrayet
end loop

Findes nok smartere...
Der er noget med, at det ikke er så enkelt at fjerne elementer fra et
array.

Birger



Birger Sørensen (03-09-2008)
Kommentar
Fra : Birger Sørensen


Dato : 03-09-08 22:06

Birger Sørensen forklarede den 03-09-2008:
> Kim Ludvigsen sendte dette med sin computer:
>> Birger Sørensen skrev:
>>> Følgende er skrevet af Kim Ludvigsen:
>>>> Jeg har en række filnavne i et array som er indlæst ved hjælp af glob().
>>>> Jeg vil gerne have udskrevet filnavnene i en anden rækkefølge end den de
>>>> ligger i i arrayet, hvordan gør jeg det?
>>>
>>> "i en anden rækkefølge" er temmelig uspecificeret...
>>
>> Ok: i tilfældig rækkefølge.
>>
>>> http://dk.php.net/manual/en/function.sort.php
>>> der er en hel stribe funktioner til at sortere arrays med, nederst...
>>
>> Problemet er, at jeg ikke vil have filnavnene sorteret efter et bestemt
>> kriterium som filnavn, -størrelse eller ændringstid.
>
> Tilfældig udtrækning, uden tilbagelægning...
> loop
> Generer et tilfældigt tal >= 0 og < længen af arrayet
> idtræk efter index
> slet elementet fra arrayet
> end loop
>
> Findes nok smartere...
> Der er noget med, at det ikke er så enkelt at fjerne elementer fra et array.
>
> Birger

unset() kan slette arrayelementer - ellers array_splice.
Det må kunne gøres.. ;>)

Birger



Kim Ludvigsen (03-09-2008)
Kommentar
Fra : Kim Ludvigsen


Dato : 03-09-08 22:11

Birger Sørensen skrev:
> Kim Ludvigsen sendte dette med sin computer:
>>
>>> "i en anden rækkefølge" er temmelig uspecificeret...
>>
>> Ok: i tilfældig rækkefølge.
>>
> Tilfældig udtrækning, uden tilbagelægning...
> ...
> Findes nok smartere...

Jeg havde håbet, der fandtes en slags usort-funktion.

Det lyder som om, det er nemmere for mig at ændre
filnavnene. Det ville jeg helst have undgået, fordi de
afspejler indholdet i filerne, men det drejer sig ikke om så
mange filer, så det er nok til at leve med.

Tak for indsatsen!

--
Mvh. Kim Ludvigsen
Beskyt de små mod porno på internettet.
http://kimludvigsen.dk

Birger Sørensen (03-09-2008)
Kommentar
Fra : Birger Sørensen


Dato : 03-09-08 22:23

Kim Ludvigsen sendte dette med sin computer:
> Birger Sørensen skrev:
>> Kim Ludvigsen sendte dette med sin computer:
>>>
>>>> "i en anden rækkefølge" er temmelig uspecificeret...
>>>
>>> Ok: i tilfældig rækkefølge.
>>>
>> Tilfældig udtrækning, uden tilbagelægning...
>> ...
>> Findes nok smartere...
>
> Jeg havde håbet, der fandtes en slags usort-funktion.
>
> Det lyder som om, det er nemmere for mig at ændre filnavnene. Det ville jeg
> helst have undgået, fordi de afspejler indholdet i filerne, men det drejer
> sig ikke om så mange filer, så det er nok til at leve med.
>
> Tak for indsatsen!

Der findes en usort(). Den skal have en brugerdefineret
sorteringsalgoritme. Og det bliver det vist ikke nemmere af...

Birger



Jonathan Stein (03-09-2008)
Kommentar
Fra : Jonathan Stein


Dato : 03-09-08 22:34

Kim Ludvigsen skrev:

> Jeg havde håbet, der fandtes en slags usort-funktion.

usort findes skam, men gør ikke det, du ønsker.

Kig i stedet på shuffle (http://dk.php.net/shuffle).

M.v.h.

Jonathan

--
Er din email vigtig? Er du træt af, at din hjemmeside er nede?
Stabilt webhotel på redundant setup med daglig backup.
POP3, IMAP, PHP, JSP, Java, Perl, Python, Telnet, SSH, Cron-jobs m.v.
http://www.jsp-hotel.dk/

Birger Sørensen (03-09-2008)
Kommentar
Fra : Birger Sørensen


Dato : 03-09-08 22:35

Kim Ludvigsen skrev:
> Birger Sørensen skrev:
>> Kim Ludvigsen sendte dette med sin computer:
>>>
>>>> "i en anden rækkefølge" er temmelig uspecificeret...
>>>
>>> Ok: i tilfældig rækkefølge.
>>>
>> Tilfældig udtrækning, uden tilbagelægning...
>> ...
>> Findes nok smartere...
>
> Jeg havde håbet, der fandtes en slags usort-funktion.
>
> Det lyder som om, det er nemmere for mig at ændre filnavnene. Det ville jeg
> helst have undgået, fordi de afspejler indholdet i filerne, men det drejer
> sig ikke om så mange filer, så det er nok til at leve med.
>
> Tak for indsatsen!

Helt ærligt...

$nyt_array = array(); // vist egentlig ikke nødvendig...
while ( count( $fil_array) > 0) {
   $rnd = rand( 0, count( $fil_array));
   $nyt_array[] = $fil_array[ $rnd];
   array_splice( $fil_array, 1, 1);
   }
// $nyt_array indeholder filnavne i tilfældig rækkefølge...

dovenskaben længe leve!

Birger



Birger Sørensen (03-09-2008)
Kommentar
Fra : Birger Sørensen


Dato : 03-09-08 22:38

Efter mange tanker skrev Birger Sørensen:
> array_splice( $fil_array, 1, 1);
skal selvfølgelig være
array_splice( $fil_array, $rnd, 1);

men der er en simplere løsning...

Birger



Martin (04-09-2008)
Kommentar
Fra : Martin


Dato : 04-09-08 03:45

Birger Sørensen wrote:
> Efter mange tanker skrev Birger Sørensen:
>> array_splice( $fil_array, 1, 1);
> skal selvfølgelig være
> array_splice( $fil_array, $rnd, 1);
>
> men der er en simplere løsning...

Altså... hvorfor ikke bare bruge PHP funktionen til det?

$array = array('Ole','Knud','Birger','Svend');
shuffle($array);
foreach($array AS $a) {
echo $a;
}

Birger Sørensen (04-09-2008)
Kommentar
Fra : Birger Sørensen


Dato : 04-09-08 11:26

Martin sendte dette med sin computer:
> Birger Sørensen wrote:
>> Efter mange tanker skrev Birger Sørensen:
>>> array_splice( $fil_array, 1, 1);
>> skal selvfølgelig være
>> array_splice( $fil_array, $rnd, 1);
>>
>> men der er en simplere løsning...
>
> Altså... hvorfor ikke bare bruge PHP funktionen til det?
>
> $array = array('Ole','Knud','Birger','Svend');
> shuffle($array);
> foreach($array AS $a) {
> echo $a;
> }

Jeg kender ikke alle de forskellige funktioner der finde, og troede
selcfølgelig at du selv havde set efter den.
Da du spurgte, var min indfaldsvinkel derfor at finde noget
alternativt..
Sevlfølgelig skal du bruge shuffle. Hvorfor spurgte du?

Birger



Kim Ludvigsen (04-09-2008)
Kommentar
Fra : Kim Ludvigsen


Dato : 04-09-08 15:12

Birger Sørensen skrev:
> Martin sendte dette med sin computer:
>>
>> Altså... hvorfor ikke bare bruge PHP funktionen til det?
>
> Jeg kender ikke alle de forskellige funktioner der finde, og troede
> selcfølgelig at du selv havde set efter den.

Det var mig, der ikke kendte shuffle.

--
Mvh. Kim Ludvigsen
Lær at bruge Google som lommeregner.
http://kimludvigsen.dk

Birger Sørensen (04-09-2008)
Kommentar
Fra : Birger Sørensen


Dato : 04-09-08 15:29

Følgende er skrevet af Kim Ludvigsen:
> Birger Sørensen skrev:
>> Martin sendte dette med sin computer:
>>>
>>> Altså... hvorfor ikke bare bruge PHP funktionen til det?
>>
>> Jeg kender ikke alle de forskellige funktioner der finde, og troede
>> selcfølgelig at du selv havde set efter den.
>
> Det var mig, der ikke kendte shuffle.

Det gjorde jeg heller ikke... ;>)
Men den står i dokumentationen, og kan sikkert også finde gennem
søgemaskinerne.
Det havde sikkert også været nemmere for dig selv, i den sidste ende...

Birger



Bertel Lund Hansen (04-09-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 04-09-08 15:42

Birger Sørensen skrev:

> Det havde sikkert også været nemmere for dig selv, i den sidste ende...

Nej, det havde det ikke. Der var flere ting han skulle have rede
på, og det kunne tage dagevis hvis han selv skulle eksperimentere
sig frem til det.

--
Bertel
http://bertel.lundhansen.dk/      FIDUSO: http://fiduso.dk/

Birger Sørensen (04-09-2008)
Kommentar
Fra : Birger Sørensen


Dato : 04-09-08 15:53

Bertel Lund Hansen skrev den 04-09-2008:
> Birger Sørensen skrev:
>
>> Det havde sikkert også været nemmere for dig selv, i den sidste ende...
>
> Nej, det havde det ikke. Der var flere ting han skulle have rede
> på, og det kunne tage dagevis hvis han selv skulle eksperimentere
> sig frem til det.

Her tror jeg så du undervurderer Kim. ;>)
Hvor mange eksperimenter, kan man foretage med en enkel funktion som
shuffle?

Birger



Kim Ludvigsen (04-09-2008)
Kommentar
Fra : Kim Ludvigsen


Dato : 04-09-08 17:09

Birger Sørensen skrev:
> Bertel Lund Hansen skrev den 04-09-2008:
>> Birger Sørensen skrev:
>>
>>> Det havde sikkert også været nemmere for dig selv, i den sidste ende...
>>
>> Nej, det havde det ikke. Der var flere ting han skulle have rede
>> på, og det kunne tage dagevis hvis han selv skulle eksperimentere
>> sig frem til det.
>
> Her tror jeg så du undervurderer Kim. ;>)

Det tror jeg desværre ikke.

> Hvor mange eksperimenter, kan man foretage med en enkel funktion som
> shuffle?

Allerførst skulle jeg jo finde den. Jeg havde søgt i et par
timer uden held, fordi jeg ingen ide havde om et relevant
søgeord. Det er selvfølgelig indlysende nu, hvor jeg kender
navnet på funktionen.

Og havde jeg selv fundet funktionen, skulle jeg finde ud af
at bruge den, og jeg er absolut ikke en kodehaj. Jeg kan
lige finde ud af at kopiere kode, og med lidt prøven sig
frem i lidt tid kan jeg også lige finde ud af, om der
mangler en parantes i koden (indsæt selv en passende smiley).

--
Mvh. Kim Ludvigsen
Desktop Sidebar smelter internettet sammen med din computer.
http://kimludvigsen.dk

Birger Sørensen (04-09-2008)
Kommentar
Fra : Birger Sørensen


Dato : 04-09-08 19:47

Efter mange tanker skrev Kim Ludvigsen:
> Birger Sørensen skrev:
>> Bertel Lund Hansen skrev den 04-09-2008:
>>> Birger Sørensen skrev:
>>>
>>>> Det havde sikkert også været nemmere for dig selv, i den sidste ende...
>>>
>>> Nej, det havde det ikke. Der var flere ting han skulle have rede
>>> på, og det kunne tage dagevis hvis han selv skulle eksperimentere
>>> sig frem til det.
>>
>> Her tror jeg så du undervurderer Kim. ;>)
>
> Det tror jeg desværre ikke.
>
>> Hvor mange eksperimenter, kan man foretage med en enkel funktion som
>> shuffle?
>
> Allerførst skulle jeg jo finde den. Jeg havde søgt i et par timer uden held,
> fordi jeg ingen ide havde om et relevant søgeord. Det er selvfølgelig
> indlysende nu, hvor jeg kender navnet på funktionen.
>
> Og havde jeg selv fundet funktionen, skulle jeg finde ud af at bruge den, og
> jeg er absolut ikke en kodehaj. Jeg kan lige finde ud af at kopiere kode, og
> med lidt prøven sig frem i lidt tid kan jeg også lige finde ud af, om der
> mangler en parantes i koden (indsæt selv en passende smiley).

http://www.php.net/manual/en/
Er et vældig godt sted.
Der er desuden en søgefunktion - tast det du tror du leder efter - hvis
den findes, tages du til den, ellers finder den steder i manualen hvor
ordet anvendes...

Birger



Philip Nunnegaard (04-09-2008)
Kommentar
Fra : Philip Nunnegaard


Dato : 04-09-08 18:34

"Birger Sørensen" <sdc@bbsorensen.com> skrev

> Her tror jeg så du undervurderer Kim. ;>)
> Hvor mange eksperimenter, kan man foretage med en enkel funktion som
> shuffle?

Man er vel nødt til at kende et ord for at vide hvad man skal indtaste i
søgefeltet.


Martin (05-09-2008)
Kommentar
Fra : Martin


Dato : 05-09-08 07:29

Philip Nunnegaard wrote:
> "Birger Sørensen" <sdc@bbsorensen.com> skrev
>
>> Her tror jeg så du undervurderer Kim. ;>)
>> Hvor mange eksperimenter, kan man foretage med en enkel funktion som
>> shuffle?
>
> Man er vel nødt til at kende et ord for at vide hvad man skal indtaste i
> søgefeltet.

Google søgestreng: php random array
Så tages man til phps manual array_rand, men den funktion er dog ikke
lige præcis den rigtige - men så står der "See also: shuffle()" i manualen.

PHPs manual er utrolig godt bygget op :)

Bertel Lund Hansen (05-09-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 05-09-08 10:18

Martin skrev:

> PHPs manual er utrolig godt bygget op :)

Hvorfor dog argumentere imod at man må spørge om hjælp i en
nyhedsgruppe?

--
Bertel
http://bertel.lundhansen.dk/      FIDUSO: http://fiduso.dk/

Birger Sørensen (05-09-2008)
Kommentar
Fra : Birger Sørensen


Dato : 05-09-08 17:20

Bertel Lund Hansen formulerede spørgsmålet:
> Martin skrev:
>
>> PHPs manual er utrolig godt bygget op :)
>
> Hvorfor dog argumentere imod at man må spørge om hjælp i en
> nyhedsgruppe?

Uha nej, da.
Jeg kente heller ikke shuffle funktionen - og fik oven i købet, en
lille php øvelse ud af det.
Så det er da helt fint.
Resten var såmænd bare lidt drillereri fra mig til Kim... Ellers ville
der ikke have været smiley - eller i hvert fald noget andet end den
anvendte.

Birger



Arne Feldborg (05-09-2008)
Kommentar
Fra : Arne Feldborg


Dato : 05-09-08 12:49

Martin <maaNO@SPAMscandesigns.dk> skrev Fri, 05 Sep 2008 08:29:23 +0200


>Google søgestreng: php random array
>Så tages man til phps manual array_rand, men den funktion er dog ikke
>lige præcis den rigtige - men så står der "See also: shuffle()" i manualen.
>
Nu synes jeg ærlig talt i er ved at køre det lidt (for) langt ud.
Den oprindelige spørger vidste ikke helt hvad han skulle lede efter, og
så spurgte han her - længere er den ikke.

Man kunne jo også have oplyst manden om feks. disse to sider, og andre
lignede sider, som er en rigtig god vej til at finde funktioner man
slet ikke vidste eksisterede.
http://dk.php.net/manual/en/ref.array.php
http://dk.php.net/manual/en/ref.strings.php


--
mvh, A:\Feldborg

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

Bertel Lund Hansen (03-09-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 03-09-08 22:56

Kim Ludvigsen skrev:

> Jeg har en række filnavne i et array som er indlæst ved
> hjælp af glob(). Jeg vil gerne have udskrevet filnavnene i
> en anden rækkefølge end den de ligger i i arrayet, hvordan
> gør jeg det?


> Min nuværende kode:

> foreach (glob("*.txt") as $filename) {
> include "$filename";
> }

I almindelighed er det nemmere at benytte et array:

   $my_array=(glob("*.txt");

Det kan blandes sådan:

   shuffle ($my_array);

og udskrives:

   foreach ($my_array as $line) echo "$line\n";

Hvis du bare skal have et tilfældigt element ad gangen og ikke en
hel liste, kan du bruge:

   echo array_rand($my_array)."\n";

--
Bertel
http://bertel.lundhansen.dk/      FIDUSO: http://fiduso.dk/

Kim Ludvigsen (03-09-2008)
Kommentar
Fra : Kim Ludvigsen


Dato : 03-09-08 23:23

Bertel Lund Hansen skrev:
> Kim Ludvigsen skrev:
>> Min nuværende kode:
>
>> foreach (glob("*.txt") as $filename) {
>> include "$filename";
>> }
>
> I almindelighed er det nemmere at benytte et array:
>
>    $my_array=(glob("*.txt");

Hvis jeg ændrer det til:
$my_array=(glob("*.txt"));
så virker det fint.

> Det kan blandes sådan:
>
>    shuffle ($my_array);

Det var lige netop sådan en funktion, jeg ledte efter. Tak
til jer alle!

--
Mvh. Kim Ludvigsen
Lær ti-fingersystemet med det gratis program SES Type.
http://kimludvigsen.dk

Bertel Lund Hansen (04-09-2008)
Kommentar
Fra : Bertel Lund Hansen


Dato : 04-09-08 08:56

Kim Ludvigsen skrev:

> >    $my_array=(glob("*.txt");

> Hvis jeg ændrer det til:
> $my_array=(glob("*.txt"));

Den ekstra parentes var en smutter. Undgå overflødige parenteser.
Følgende virker alle sammen:

$my_array=((glob("*.txt")));
$my_array=(((((glob("*.txt"))))));
$my_array=((((((((((glob("*.txt")))))))))));

Men dette er nok:

$my_array=glob("*.txt");

--
Bertel
http://bertel.lundhansen.dk/      FIDUSO: http://fiduso.dk/

Kim Ludvigsen (04-09-2008)
Kommentar
Fra : Kim Ludvigsen


Dato : 04-09-08 09:23

Bertel Lund Hansen skrev:
> Kim Ludvigsen skrev:
>
>>>    $my_array=(glob("*.txt");
>
>> Hvis jeg ændrer det til:
>> $my_array=(glob("*.txt"));
>
> Den ekstra parentes var en smutter.

Det var jeg klar over. Jeg bemærkede det blot for det
tilfælde, at en anden på et tidspunkt fandt indlægget og
ville bruge koden.

--
Mvh. Kim Ludvigsen
Skrot mus og tastatur, i fremtiden kan du styre computeren
med stemmen, tanken - eller dit humør.
http://kimludvigsen.dk

Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31962
Nyheder : 719565
Indlæg : 6408176
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste