ugrás a tartalomhoz

Tömb értékeinek összekeverése

simisoma · 2011. Szep. 17. (Szo), 16.28
Sziasztok!

Hogy tudnám megoldani, hogy egy tömböm értékeit véletlenszerűen megkeverjek és utána listázzam.

$tomb=array();

$tomb[]=piros;
$tomb[]=kék;
$tomb[]=zöld;

--> ezeket szeretném összekeverni

foreach ($tomb as $szin)
{
echo "Szín: $szin<br />\n";
}

--> itt már minden futtatásnál más-más sorrendben listátódjon ki.

Köszi!!!
 
1

shuffle

Totti 1986 · 2011. Szep. 17. (Szo), 16.34
2

Hmmm..

simisoma · 2011. Szep. 17. (Szo), 17.20
Sajna ezzel nem igazán keverte meg vagy én értelmezem roszúl, adnál nekem egy mintát?
Megköszönném... :-)
3

RTFM

Peete · 2011. Szep. 17. (Szo), 19.48
Totti által linkelt leírás első mintapéldáját átírva a Te esetedre:

<?php
$tomb=array();

$tomb[]=piros;
$tomb[]=kék;
$tomb[]=zöld;
shuffle($tomb);
foreach ($tomb as $tombelem) {
    echo "$tombelem ";
}
?>
5

Már majdnem yooo :-)

simisoma · 2011. Szep. 17. (Szo), 22.08
Köszi,

annyi még hogy itt összekeveri a tömb számát és az értéket is, nekem az fontos lenne, hogy a tömb száma megmaradjon:

$tomb[1]=piros;
$tomb[2]=kék;
$tomb[3]=zöld;

összekeverés után maradjon meg a tömb száma:

$tomb[1]=piros;
$tomb[3]=zöld;
$tomb[2]=kék;

a színeknél a tömb számában tartom az adatbázisban lévő szín id-ét.

Hmmm... remélem érthetően írtam :-))

Köszönöm...
6

Akkor rosszul írtad a kérdést,...

Peete · 2011. Szep. 18. (V), 00.07
(vagy mi olvastuk rosszul)..

A shuffle() azt tudja, amit. Tehát, hogy összekeveri a tömb értékeit, tehát a:
kulcs1 => érték1
kulcs2 => érték2
kulcs3 => érték3
formátumból
kulcs1 => érték2
kulcs2 => érték3
kulcs3 => érték1
jellegű tömböt alakít ki, minden lefutásnál mást.

Kérdés: miért nem használod a [szvsz] legegyszerűbb megoldást?
Azt mondtad:
a színeknél a tömb számában tartom az adatbázisban lévő szín id-ét.


Akkor mi lenne, ha az adatbázisból eleve véletlenszerűen kérdeznéd le a színkód=>szín párokat?
SELECT * FROM tabla WHERE id ORDER BY rand()
7

Az nem yoo

simisoma · 2011. Szep. 18. (V), 00.39
Az sajna nem jó, mert egy része adatbázisból jön le de ha nincsen feltöltve 60 szín akkor a maradékot egy üres képpel kell kitöltsem.

Most lekérem a színeket egy tömbe és ha nincsen meg 60 szín akkor hozzáadom a maradék mennyiséget (ami egy sablon kép).

az a lényege, hogy minden frissítésnél a sablon képpel együtt a színek megkeveredjenek és úgy kell kidobálnom egy oldalon össze-vissza.

Még arra gondoltam hogy egy TEMP táblát létrehozok és onnan lekérem véletlenszerűen, csak az is lassítja a működést, meg gondolom felesleges...

De, ha nincs más megoldás.....

Nincsen erre valami PHP-s megoldás?
8

akkor visszatérve az eredeti...

Peete · 2011. Szep. 18. (V), 01.17
Szóval akkor adott egy asszociatív tömb, 60 elemmel, és az lenne a lényeg, hogy véletlenszerű sorban jelenítsük meg..
Azt hiszem, ehhez most nem sokat tudok hozzászólni; egyetlen megmaradt ötletem:
Határozd meg a tömb elemeinek számát a count() függvénnyel, ezt tárold el egy változóba, majd kérj véletlenszerűen kiválasztott x elemet a tömbödből. /és ugye ha az x a tömb elemszáma, akkor meg is van a végeredmény./

Erre -bár konkrétan erre az esetre sosem próbáltam meg alkalmazni, de elvileg- van a php-ben lehetőség, mégpedig az array_rand függvény.
9

Update.. Nekem működik!

Peete · 2011. Szep. 18. (V), 01.25
A fent említett eljárás nekem eredményt hozott, szimulálva a problémát három színnel:
<?php
$tomb=array();
$tomb['FF0000']=piros;
$tomb['0000FF']=kék;
$tomb['00FF00']=zöld;
$darab = count($tomb);
$random = array_rand($tomb, $darab);
foreach ($random as $ertek) {
echo "A szín neve: $tomb[$ertek], melynek RGB kódja: $ertek<br/>";
}
?>
Így gondoltad?
4

Hogy

H.Z. v2 · 2011. Szep. 17. (Szo), 19.59
Hogy értelmezted?
shuffle($tomb);

Kb. ennyi.
Neked mit csinált? Mondjuk a doksit ha megnézed, a User Contributed Notes alatti első kommentben írnak valamit arról, hogy bizonyos suhosin verziók esetében nem feltétlenül működik.
10

uasort

Poetro · 2011. Szep. 18. (V), 07.16
Az uasort associativ tombok rendezesere szolgal. Ha megfelelo rendezo fuggvenyt irsz, akkor veletlenszeruen lesznek az elemek a tombben.