taulukko kalenteri: taulukko asiat: ke 09.03.2011 12.03.2011 lääkäri klo 11.00 to 10.03.2011 10.03.2011 tentti klo 9.00 pe 11.03.2011 15.03.2011 kilpailut 12.00 la 12.03.2011 11.03.2011 kirjasto 16.00 su 13.03.2011 ma 14.03.2011 ti 15.03.2011 ke 16.03.2011 to 17.03.2011 Haluttu lopputulos: ke 09.03.2011 to 10.03.2011 tentti klo 9.00 pe 11.03.2011 kirjasto 16.00 la 12.03.2011 lääkäri klo 11.00 su 13.03.2011 ma 14.03.2011 ti 15.03.2011 kilpailut 12.00 ke 16.03.2011 to 17.03.2011
Miten tällainen kannattaa tehdä, yritin for silmukassa käydä läpi ja korvata preg_replacella $paiva => $paiva $asia.
(Mod. huom: Käytä kooditageja, jos haluat, että välit säilyvät.)
Onko tuo lähtötilanne suoraan jonkin tiedoston sisältö, vai kirjoititko koodissa olevien taulukkojen sisällön näkyviin tuohon muotoon?
Lähtötilanne on kaksi tiedostoa. kalenteri ja asiat.
kalenteri.txt:
ke 09.03.2011 to 10.03.2011 pe 11.03.2011 la 12.03.2011 su 13.03.2011 ma 14.03.2011 ti 15.03.2011 ke 16.03.2011 to 17.03.2011
asiat.txt:
12.03.2011 lääkäri klo 11.00 10.03.2011 tentti klo 9.00 15.03.2011 kilpailut 12.00 11.03.2011 kirjasto 16.00
kalenteri.php:
<?php $kalenteri = file("kalenteri.txt"); $asiat = file("asiat.txt"); foreach ($asiat as $asia) { $asia = trim($asia); $osat = explode(" ", $asia, 2); $merkinta[$osat[0]] = $osat[1]; } foreach ($kalenteri as $paiva) { $paiva = trim($paiva); $osat = explode(" ", $paiva); echo $paiva . " " . @$merkinta[$osat[1]] . "<br>"; } ?>
Ideana on tallentaa taulukkoon $merkinta, mitä tapahtuu kunakin päivänä.
Itse ihan vain kokoaisin ensin eri päivien asiat ja kävisin sitten päivän kerrallaan läpi.
<?php $asiat = array(); foreach (file("asiat.txt") as $asia) { list($aika, $asia) = explode(" ", $asia, 2); $asiat[$aika][] = trim($asia); } $tulos = ""; foreach (file("kalenteri.txt") as $paiva) { $paiva = trim($paiva); sscanf($paiva, "%*s %s", $aika); if (empty($asiat[$aika])) { $tulos .= $paiva. "\n"; } else { $tulos .= $paiva. "\t". implode(", ", $asiat[$aika]). "\n"; } } echo $tulos;
Muokkaus: Tulipa melkein sama kuin Antilla, mutta minun versioni tukeekin useaa tapahtumaa samana päivänä eikä hämmenny turhista välilyönneistä. :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.