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 *
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 *
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
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
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 *
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 *
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
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

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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