Autor | Zpráva | ||
---|---|---|---|
shaman171 Profil |
#1 · Zasláno: 16. 8. 2011, 19:50:27
Ahoj, mám jeden script, který mi vypisuje podle datumu program ze souboru ***.ini a vypisuje ho vždy až do konce souboru ini, prostě to co je tam napsáno.
Potřeboval bych to změnit tak, aby to vypisovalo jen v ten aktuální den ten aktuální řádek, který tomu dni přísluší v tom ini souboru, jestli mi rozumíte? Pokoušel jsem se to bastlit, ale je to na mě moc. Zmíněný script vypadá takto: <?php $data = parse_ini_file(dirname(__FILE__) . '/rozpis.ini');//načte pole, kde číslo dne bude asociativní klíč $dates = array(); $days = array( 1 => 'ledna', 'února', 'března', 'dubna', 'května', 'června', 'července', 'srpna', 'září', 'října', 'listopadu', 'prosince', ); $today_date = date("Ymd"); foreach ($data as $i => $line) { $likeunix = str_replace("-", "", $i); $unix = strtotime($i); if ($today_date <= $likeunix) { $day = date("d", $unix); $month = date("m", $unix); $year = date("Y", $unix); if ($month{0} == '0') $month = substr($month, 1); echo $day.'. '.$days[$month].' '.$year.' '.$line . "<br />"; } } ?> INI soubor např. takto: 2011-08-26 = "Dnes je na menu: mrkev " 2011-08-29 = "Dnes je na menu: petržel" 2011-08-30 = "Dnes je na menu: jablko " 2011-08-31 = "Dnes je na menu: paprika " atd.... Moc děkuju za každou radu jak na to. |
||
Jake898 Profil |
#2 · Zasláno: 16. 8. 2011, 20:09:42
<?php $data = parse_ini_file(dirname(__FILE__) . '/rozpis.ini'); echo $data[date('Y-m-d', time())]; |
||
shaman171 Profil |
#3 · Zasláno: 16. 8. 2011, 20:18:33
Moc díky, jen nevím co dělám špatně, ale nefunguje mi to, jak má tedy teďka vypadat ten soubor se scriptem? Jen to co jsi napsal? Nebo to co píšeš má nahradit nějaké řádky?
Moc díky |
||
Jake898 Profil |
#4 · Zasláno: 16. 8. 2011, 20:20:44
Jen to co jsem napsal.
Pokud je v souboru rozpis.ini řádek ... 2011-08-16 = "Dnes je na menu: mrkev" ... tak to dnes vypíše ten text, jinak vyhodí chybu úrovně E_NOTICE. |
||
shaman171 Profil |
#5 · Zasláno: 16. 8. 2011, 20:23:22 · Upravil/a: shaman171
Aha, už tomu rozumím. Moc díky, teď jsem ale přišel na chybu u mě, potřeboval bych aby to vypsalo buďto ten řádek na aktuální den a pokud tam není, tak nejbližší možný. Je to reálné?
A když na to koukám, vypisovalo mi to jakoby i to datum k tomu, to bych tam také potřeboval. Výpis by pak měl vypadat např.:"Dnes: 16.8.2011 Dnes je na menu: mrkev" to že je tam 2x dnes neřešme, to je příklad. |
||
Jake898 Profil |
#6 · Zasláno: 16. 8. 2011, 20:59:41 · Upravil/a: Jake898
No, něco jsem vymyslel, ale třeba někoho napadne lepší řešení.
<?php $data = parse_ini_file(dirname(__FILE__) . '/rozpis.ini'); if (isset($data[date('Y-m-d', time())])){ echo date('d.m.Y', time()) . ': ' . $data[date('Y-m-d', time())]; }else{ foreach ($data as $date => $value){ $datetime = DateTime::createFromFormat('Y-m-d', $date); if ($datetime->getTimestamp() >= time()){ echo date('d.m.Y', $datetime->getTimestamp()) . ': ' . $value; break; } } } Ale není to ošetřený např. proti špatnému pořadí dat, takže pokud se v tom souboru dostane 2011-08-18 před 2011-08-17, tak to 16.8.2011 vypíše tu hodnotu k 2011-08-18. |
||
shaman171 Profil |
#7 · Zasláno: 16. 8. 2011, 21:05:16 · Upravil/a: shaman171
Moc děkuju.
Nechci si moc vymýšlet, ale nějak mi to nefunguje, vypíše mi to dnešní datum, ale už né to nejbližší další. Navíc mi to nevypisuje to datum. Jinak ohledně pořadí dat to si ošetřím sám, to není problém. Divné je, že mi to nevypíše ani chybu, prostě to nevypíše nic. |
||
motik Profil |
#8 · Zasláno: 16. 8. 2011, 21:06:56
shaman171
záleží k čemu to chceš - dá se s tím i vyhrát (dnes, zítra...) $data = parse_ini_file('rozpis.ini'); $datum = date("Y-m-d"); $d = 0; while (!isset($data[$datum])) { // do budoucna je +, do minulosti nahraď za - ++$d; $datum = date("Y-m-d", strtotime("+" . $d . " day")); } switch ($d) { case 0: $den = "Dnes je"; break; case 1: $den = "Zítra bude"; break; case 2: $den = "Pozítří bude"; break; default: $den = "Časem bude"; } echo $den . ': ' . date("d.m.Y", strtotime("+" . $d . " day")) . ' ' . $data[$datum]; ------------------------------------------------------------------------- ten výpis už by si měl být schopný si upravit podle svého |
||
Jake898 Profil |
#9 · Zasláno: 16. 8. 2011, 21:08:23
Ano, vypisuje to data k dnešnímu dni nebo data k nejbližšímu dni. Pokud jde o to, aby to vypsalo obojí, tak stačí odstranit konstrukt else.
<?php $data = parse_ini_file(dirname(__FILE__) . '/rozpis.ini'); if (isset($data[date('Y-m-d', time())])){ echo date('d.m.Y', time()) . ': ' . $data[date('Y-m-d', time())]; } foreach ($data as $date => $value){ $datetime = DateTime::createFromFormat('Y-m-d', $date); if ($datetime->getTimestamp() >= time()){ echo date('d.m.Y', $datetime->getTimestamp()) . ': ' . $value; break; } } |
||
motik Profil |
#10 · Zasláno: 16. 8. 2011, 21:09:40
motik:
„while (!isset($data[$datum]))“ ještě by tam mohla být podmínka proti zacyklení (třeba na 50 dní), kdyby tam náhodou ten záznam nebyl. |
||
shaman171 Profil |
#11 · Zasláno: 16. 8. 2011, 21:11:56
motik Tohle je úplně přesně to co jsem potřeboval, jen jsem to neuměl napsat. Dokonalé!!
Moc Vám děkuju! :-) |
||
Tori Profil |
#12 · Zasláno: 16. 8. 2011, 21:15:14 · Upravil/a: Tori
|
||
motik Profil |
#13 · Zasláno: 16. 8. 2011, 21:15:20
shaman171:
„Dokonalé!!“ no dokonalé to není, hlavně si tam radši hoď tu podmínku!!! --------------------------------------------------------------------------------------------- a do toho ini souboru necpat "Dnes je na menu:", dej si to až u výpisu |
||
shaman171 Profil |
#14 · Zasláno: 16. 8. 2011, 21:19:42
Jak tam hodím tu podmínku?
Špatnému pořadí dat se snad vyvaruju při vytváření ini souboru. |
||
motik Profil |
#15 · Zasláno: 16. 8. 2011, 21:28:18 · Upravil/a: motik
shaman171:
„Špatnému pořadí dat se snad vyvaruju při vytváření ini souboru.“ tady nejde ani tak o špatné pořadí dat, ale o zacyklení ("nekonečný cyklus").. while (!isset($data[$datum])) nahraď za while (!isset($data[$datum]) and $d <= 50) zkoumá to cca 50 dní dopředu - jestli chceš, tak si to číslo uprav |
||
shaman171 Profil |
#16 · Zasláno: 16. 8. 2011, 21:33:17
Aha, super už mi to funguje jak má. Fakt super. Sem nadšen. Ještě jednou moc děkuji. Ušetří mi to hodiny práce.
|
||
Časová prodleva: 13 let
|
0