Autor Zpráva
Dědeček
Profil *
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
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 *
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
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",".");
- proč jsou kolem $text uvozovky?
- 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 *
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 *
Jak tedy udělat ten shuffle pro dvě proměné aby výsledek proházení byl stejný? :)
Nox
Profil
hodnoty z prvního pole dejte jako klíče druhého, tedy
$pole = array("51a"=>"D", "61a"=>"B"...);
shuffle($pole);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0