Autor Zpráva
soucekgns
Profil
Tímto scriptem se vypíší všechny soubory ve složce xml a následně zapíší do selectu...
Ty soubory se jmenují 201104.xml a 201105.xml -> v selectu 2011 a 2011
Potřeboval bych, aby se do selectu zapsala každá hodnota jen jednou a to i v případě (201104.xml a 201105.xml a 201204.xml a 201205.xml).
Díky za rady
$slozka = opendir("xml/");
while ($soubor = readdir($slozka)) {
  if ($soubor != "." && $soubor != "..") {
    list($nazev_souboru, $pripona) = explode('.', $soubor);
    $rok_souboru = substr($nazev_souboru, 0, -2);
      if (date("Y") == $rok_souboru) {
      echo '<option value="'.$rok_souboru.'" selected>'.$rok_souboru.'</option>';
      }
      if (date("Y") < $rok_souboru) {
      echo '<option value="'.$rok_souboru.'">'.$rok_souboru.'</option>';
      }
    }
  }
Taps
Profil
soucekgns:
co takto
<?php
$oznaceni[date("Y")]='selected';

$slozka = opendir("xml/");
while ($soubor = readdir($slozka)) {
  if ($soubor != "." && $soubor != "..") {
    list($nazev_souboru, $pripona) = explode('.', $soubor);
    $rok_souboru = substr($nazev_souboru, 0, -2);
      $directory[]=$rok_souboru;
    }
  }
  $unique=array_unique($directory); //vybere jen unikátní názvy
  ?>
<form>
<select name="vyber">
<?
  
foreach($unique as $d){
echo'<option value="'.$d.'" '.$oznaceni[$d].'>'.$d.'</option>';
  
  }
?>
</select>
</form>

soucekgns
Profil
Díky moc, a nešlo by ten výpis ještě seřadit od nejmenšího k největšímu?
Díval jsem se na usort, ale nevím si s tím rady...
Alphard
Profil
sort(), možná natsort() (ale spíš bych to typoval na čísla, kdyby hrozilo, že se dostanete do problémových intervalů).

K tomu nápadu $oznaceni[$d] mám teda velké výhrady.
Taps
Profil
Alphard:
K tomu nápadu $oznaceni[$d] mám teda velké výhrady.
poděl se o své myšlenky
Alphard
Profil
[#5] Taps
Nerad bych se zase dostal do debaty, jestli notice prostě skrývat, nebo je nevytvářet. Já se snažím o ten druhý styl a kód
<form>
<select name="vyber">
<br />
<b>Notice</b>:  Undefined offset:  2000 in <b>C:\web\www\neco\select_01.php</b> on line <b>10</b><br />
<option value="2000" >2000</option><br />
...
<b>Notice</b>:  Undefined offset:  2009 in <b>C:\web\www\neco\select_01.php</b> on line <b>10</b><br />
<option value="2009" >2009</option><br />
<b>Notice</b>:  Undefined offset:  2010 in <b>C:\web\www\neco\select_01.php</b> on line <b>10</b><br />
<option value="2010" >2010</option>
<option value="2011" selected>2011</option><br />
<b>Notice</b>:  Undefined offset:  2012 in <b>C:\web\www\neco\select_01.php</b> on line <b>10</b><br />
<option value="2012" >2012</option><br />
<b>Notice</b>:  Undefined offset:  2013 in <b>C:\web\www\neco\select_01.php</b> on line <b>10</b><br />
<option value="2013" >2013</option><br />
<b>Notice</b>:  Undefined offset:  2014 in <b>C:\web\www\neco\select_01.php</b> on line <b>10</b><br />
<option value="2014" >2014</option><br />
</form>
se mi prostě nelíbí. Když se to skryje nastavením zobrazení notice, stejně se mi líbit nebude. Berte to jako můj názor, nemusíte mi ho vyvracet.
Taps
Profil
Alphard:
OK
soucekgns
Profil
Nejsem tak dobrý jako vy:-), takže nechápu, jak to mám zapsat když nemám dané ty roky napevno a k tomu mám foreach tj mi to hodnoty hází jednotlivě...
To je jediné, co jsem pochopil:
$array = array("2010", "2011", "2012", "2013");
natsort($array);
foreach ($array as $key => $no) {
    echo "[" . $key . "] = " . $no . "\n";
}
Alphard
Profil
To vám chybí? Téměř celý kód máte do Tapse, stačí seřadit to pole. Aspoň tak jsem to pochopil.
soucekgns
Profil
No potřebuji seřadit toto a nějak jsem to nepochopil:
foreach($unique as $d){
echo'<option value="'.$d.'" '.$oznaceni[$d].'>'.$d.'</option>';
}
Tori
Profil
soucekgns:
Postup vypadá asi takhle:
// projdi adresář, z názvů souborů .xml vytáhni rok a ulož
// z uložených roků vyhoď duplicity
//--- až potud to máte v [#1] a [#2]
// seřaď roky vzestupně -> tady použijete fci sort() nebo natsort(), úplně stejně jako v [#8]
// projdi uložené roky, z každého udělej volbu do selectu a předvyber aktuální rok 
Jen potřebujete porovnávat současný rok s aktuální položkou pole (v tom foreach) a při shodě napsat "selected". Taps to vyřešil tak, že text "selected" uložil jako $oznaceni[2011] = "selected", a ve foreach postupně zkouší vložit $oznaceni[2009], $oznaceni[2010], atd. Vedlejší efekt jsou ty chybové hlášky.

Druhá varianta (která nebude házet chyby Notice) je ta, že si prostě současný rok uložíte jako číslo do proměnné a v tom foreach ji budete porovnávat s aktuální položkou pole.
Taps
Profil
soucekgns:
stačí za řádek
 $unique=array_unique($directory);

doplnit
natsort($unique);

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: