| 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: 16 let
|
|||
0