Autor | Zpráva | ||
---|---|---|---|
Barca07 Profil * |
Ahoj kluci,
chtěla bych vás poprosit o pomoc. Napsala jsem si Céčkový předmět Tvorba webových stránek a ten profesor je úplný magor. Zadal nám úkol, který snad s webovkama nemá nic společeného. Musím to odevzdat dnes do půlnoci jinak už nedostanu zápočet. A tak plosím plosím, smutně koukám. našel by se tu hodný človíček co by mi s tím mohl? Aspoň nastínil co se má dělat? Nemám k tomu žádný studijní text a manuál PHP asi nepřichází v úvahu s mojí angličtinou. Tady je zadání úkolu: Při zadávání intervalu hodnot (např. v dialogovém okně Windows pro tisk vybraných stránek) se někdy používá zkrácený zápis seznamu čísel ve tvaru 2-5,8,10,15-17 apod. Napište funkci rozlozIntervaly($vstup), která takový zkrácený zápis převede na pole jednotlivých hodnot, tedy v našem případě na 2,3,4,5,8,10,15,16,17. Nápověda: využijte zejména funkci explode(). Děkuji za každou radu |
||
FT Profil * |
#2 · Zasláno: 13. 3. 2010, 09:48:05
Vytvoř si prázdné finální pole.
$finalni_pole = array(); Pole si rozlož pomocí explode, oddělovač v tomto případě je čárka $pole = explode(",",$zadane_pole); Teď projdeš pole a zjistíš jetli některá z hodnot je v intervalu. V případě že ano, uložím do pole všechna čísla, v druhém případě uložím hodnotu do finálního pole. foreach($pole as $key => $value){ if(substr_count($value,"-") { $vnitrni_pole = explode("-",$value); for($vnitrni_pole[0]; $vnitrni_pole[0] <= $vnitrni_pole[1]; $vnitrni_pole[0]++) { $finalni_pole = $vnitrni_pole[0]; $vnitrni_pole[0]++; } }else{ $finalni_pole = $value; } } Nakonci už můžeš například seředit podle hodnoty. sort($finalni_pole); Doufám že to bude fungovat :D (snad jo) (p.s. jinak, dá pak použít regulár pro zjišťování intervalu namísto explodu ) |
||
Barca07 Profil * |
#3 · Zasláno: 13. 3. 2010, 10:47:20
Mockrát děkuju. Půjdu to vyzkoušet.
<?php $vstup = 2-5,8,10,15-17 function rozloz_intervaly($vstup) { $finalni_pole = array(); $pole = explode(",",$zadane_pole); foreach($pole as $key => $value){ if(substr_count($value,"-") { $vnitrni_pole = explode("-",$value); for($vnitrni_pole[0]; $vnitrni_pole[0] <= $vnitrni_pole[1]; $vnitrni_pole[0]++) { $finalni_pole = $vnitrni_pole[0]; $vnitrni_pole[0]++; } }else{ $finalni_pole = $value; } } } ?> Někde jsem se dočetla, že funkce musí mít na konci RETURN. A tady není... A když to budu chtít vypsat, tak to mám dát ECHO rozloz_intervaly($vstup) nebo to se dělá jinak když je to pole? |
||
Alphard Profil |
#4 · Zasláno: 13. 3. 2010, 10:51:54
Vstup je řetězec, obalte ho uvozovkami, jinak to skončí syntaktickou chybou už na druhém řádku.
A ano, funkce by měla obsahovat return, kterým vrací hodnotu, tady $finalni_pole. FT vám ukázal postup (já bych vám napsal ještě méně :-)), ne celé řešení. |
||
nightfish Profil |
#5 · Zasláno: 13. 3. 2010, 11:49:48 · Upravil/a: nightfish
jinak kód ve #2 a #3 zřejmě fungovat nebude... (přepisování obsahu proměnné $finalni_pole, nesprávně poskládaný cyklus for)
osobně bych to řešil takto: <?php $vstup = "2-5,8,10,15-17"; function rozloz_intervaly($vstup) { $finalni_pole = array(); $pole = explode(",", $vstup); foreach($pole as $key => $value){ if (strpos($value, '-') !== false) { $interval = explode("-",$value); $finalni_pole = array_merge($finalni_pole, range($interval[0], $interval[1])); } else { $finalni_pole[] = $value; } } return $finalni_pole; } $vystup = rozloz_intervaly($vstup); echo implode(', ', $vystup); ?> |
||
Barca07 Profil * |
#6 · Zasláno: 13. 3. 2010, 12:32:50
Dobrý den,
mockrát vám děkuji. Vážím si vaší pomoci. A slibuju, že si už nenapíšu žádný předmět s webovkama či programováním, abych vás tu už neobtěžovala :-) přeju Vám všem hodně zdaru v tom co děláte. Papa |
||
FT Profil * |
#7 · Zasláno: 13. 3. 2010, 13:42:28
Nebude fungovat? no oprovou dvou malých chyb, věřte nebo ne, ale bude
<?php $finalni_pole = array(); $vstup = "2-5,8,10,15-17"; function rozloz_intervaly($vstup) { $finalni_pole = array(); $pole = explode(",",$vstup); foreach($pole as $key => $value){ if(substr_count($value,"-")) { $vnitrni_pole = explode("-",$value); for($vnitrni_pole[0]; $vnitrni_pole[0] <= $vnitrni_pole[1]; $vnitrni_pole[0]++) { $finalni_pole[] = $vnitrni_pole[0]; } }else{ $finalni_pole[] = $value; } } return implode(',',$finalni_pole); } echo rozloz_intervaly($vstup); ?> |
||
nightfish Profil |
#8 · Zasláno: 13. 3. 2010, 14:47:28
FT:
„Nebude fungovat?“ kód, uvedený ve [#2] opravdu nefunguje na druhou stranu je zřejmé, že když se v nefunkčním kódu opraví všechny chyby, fungovat bude |
||
Časová prodleva: 14 let
|
0