Autor | Zpráva | ||
---|---|---|---|
Dědeček Profil * |
#1 · Zasláno: 17. 5. 2010, 13:37:31
Dobrý den,
Mám dvě proměnné a to $a=61a51a28a37a70a9a59a35a13a66a $b=BDACDBCADC Proměnné sou k sobě vázány tak že 61a=B, 51a=D, 28a=A, atd. je to podle pořadí obou proměných. Potřebuji aby se proměnna $a zamichala ale současně aby byla proměnná $b vazána na stejné části. Ve výsledku by to mohlo vypadat takto $a1=51a59a66a35a61a28a37a70a9a13a $b1=DCCABACDBD Děkuji za pomoc |
||
Joker Profil |
#2 · Zasláno: 17. 5. 2010, 13:57:39
Dědeček:
Rozdělit to po těch „logických celcích“ do pole, pole proházet a pak to zase složit. |
||
Dědeček Profil * |
Mám tedy tuhle funkci
function prohazet($z) { $a=explode("a",$z); shuffle($a); return implode($a,"a"); } jenže mi vrací hodnoty špatně. Jednou nedá k poslednímu číslu 'a', jednou zase dá dvě 'a' za s sebou náhodně v řetězci a jednou dá 'a' hned na začátek před první číslo. Moderátor Majkl578: Vkládej prosím kódy mezi značky [>pre] a [>/pre] (stačí kliknout na ).
|
||
Dědeček Profil * |
#4 · Zasláno: 17. 5. 2010, 17:31:22
Tak funkce je nakonec taková
function prohazet($z,$text) { $a=explode("a",$z); $b=chunk_split("$text","1","."); $b=explode(".",$b); shuffle($a); shuffle($b); echo implode($a,"a"); echo implode($b,""); } Akorát to tedy vrací vždy špatně tu proměnnou $a. A navíc nevím jak docílit toho aby byly ty hodnoty provázané tak jako předtím. |
||
Joker Profil |
#5 · Zasláno: 17. 5. 2010, 17:38:32
Dědeček:
„Jednou nedá k poslednímu číslu 'a'“ To je normální chování implode, na konec se oddělovač nedává, čili očekávaný výsledek by dalo tohle: return implode($a,"a")."a"; „jednou zase dá dvě 'a' za s sebou náhodně v řetězci a jednou dá 'a' hned na začátek před první číslo“ Tohle je způsobené tím, že ve vstupním řetězci "a" je i úplně na konci, čili na konci vznikne prázdný prvek. explode("61a51a28a37a70a9a59a35a13a66a", "a") -> array("61","51","28","37","70","9","59","35","13","66",""); Po array_shuffle se ten prázdný prvek dostane na náhodné místo a tím vznikne ten problém. Řešení je odstranit "a" na konci, případně po explode poslední prvek pole, případně po explode pomocí array_filter odstranit prázdné prvky (pokud tam prázdné prvky nemají být) K příspěvku #4: $b=chunk_split("$text","1","."); - Druhý parametr chunk_split má být číslo a ne řetězec, takže 1 a ne "1" - Co to celé má udělat? |
||
Dědeček Profil * |
#6 · Zasláno: 17. 5. 2010, 17:50:34
Dobře smazal jsem poslední 'a' z toho řetězce a funguje to.
To celé co má udělat? Pro každého uživatele se vygeneruje nějaké ID = 1a2a3a4a5a6a7a8a9a, a uživatel k danému prvku "1a","2a","3a","4a" .. přidá odpovědi ABCD. A já potřebuji abych vzal jeho vygenerováne ID a jeho "odpovědi" a promíchal to abych "neměl" stejné "otázky" ve výsledku budou mít oba uživatelé stejné "otázky" i "odpovědi" jenže v db tomu tak vypadat nebude jelikož to bude promíchané. Výsledek Uživatel č1. 1a2a3a4a5a6a7a8a9a ABCDEFGHI Uživatel č2. 1a5a6a4a7a2a9a3a8 AEFDGBICH |
||
Dědeček Profil * |
#7 · Zasláno: 17. 5. 2010, 17:54:58
Jak tedy udělat ten shuffle pro dvě proměné aby výsledek proházení byl stejný? :)
|
||
Nox Profil |
#8 · Zasláno: 17. 5. 2010, 18:28:01
hodnoty z prvního pole dejte jako klíče druhého, tedy
$pole = array("51a"=>"D", "61a"=>"B"...); shuffle($pole); |
||
Časová prodleva: 14 let
|
0