Diskuze: PHP-pozice určitého čísla
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 8 zpráv z 8.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.


Ahoj, nejsem si z tvého zadání vším jistý, ale tady máš dvě řešení:
Pokud výstupem nemají být unikátní čísla
$min = 0;
$max = 15;
$total = 20; // $total = $_POST["a"];
$numbers = [];
for ($i = 1; $i <= $total; $i++) {
array_push($numbers, mt_rand($min, $max));
}
echo 'čísla jsou: ' . join(', ', $numbers) . '<br/>';
echo 'nejvyšší hodnota je: ' . max($numbers) . '<br/>';
echo 'pozice nejvyšší hodnoty je/jsou: '. join(', ', array_map(function ($i) { return $i + 1; }, array_keys($numbers, max($numbers))));
Pokud výstupem mají být pouze unikátní čísla
$min = 0;
$max = 15;
$total = 20; // $total = $_POST["a"];
$total = count(range($min, $max)) < $total ? count(range($min, $max)) : $total;
$numbers = [];
while(($i = count($numbers)) < $total) {
array_push($numbers, mt_rand($min, $max));
$numbers = array_unique($numbers);
}
echo 'čísla jsou: ' . join(', ', $numbers) . '<br/>';
echo 'nejvyšší hodnota je: ' . max($numbers) . '<br/>';
echo 'pozice nejvyšší hodnoty je: ' . (array_keys($numbers, max($numbers))[0] + 1);
//{$max=$random;}
{$max=$random; $pozice=$i;}
Jinak, v tom kodu mas spousty nesmyslu. Ono to nejspis funguje, ale nespolehal bych na to. Treba mi neni jasne, proc random definujes nejdriv jako array, a pak to zmenis na value (float/string)
$random= array(null); // ???
$max = $random[0];
$random = mt_rand(0,50); //???
// s array se preci pracuje takto
$pole[] = cislo;
$pole[$i] = cislo;
...
To není pravda, protože $i ve for cyklu počítá od nuly, takže pozice by byla reálně o jednu vyšší než by mu ukázala tvá úprava.
Ušlo by to v nouzi jako pozice v poli, jenže pole si hned při prvním průchodu přepíše na int. Nemluvě o dalších problémech v kódu a o tom, že takto postvený random generátor může s určitou pravděpodobností vygenerovat stejné nejvyšší číslo opakovaně a ty bys mu řekl jen první výskyt.
Zadne pole neuklada, na nulte pozici je null a tu pozici prepisuje.
Jeste bych mozna zminil
for($i1=1;$max=$random;$i++)
// $i1 a $i++ ??? urcite vis, co delas?
// $max=$random ??? porovnani je >= <= a ==, rovnitko je prirazeni
(bool) $max=$random // true, takze cyklus ihned skonci, ne?
Kdybych v té větě přímo nedodával, že si pole při prvním průchodu přepíše na int. Navíc nepřepisuje žádnou nultou pozici. On přepíše celý typ proměnné $random.
Ale o pole nejde. Jde o to, že ve for cyklu počítaném od nuly je rada $pozice=$i bez dalších úprav špatně, protože $i je v tom kódu o jednu menší než reálně vypsaná pozice největšího čísla.
Když to podle tvé první rady rozchodí, dostane na výstupu tohle
45, 41, 49, 36, 13, 4, 37, 16, 48, 32, 20, 38, 38, 20, 27
největší číslo je: 49
pozice čísla je: 2
A tento problem uz si dokaze vyresit sam... Mne to totiz prijde jako ukol do skoly a nehodlam to cele resit za nej.
Zobrazeno 8 zpráv z 8.