php - skip duplicates and filter foreach -
i'm trying filter items in big .txt
file show ones match current date. able show items matching current day, seems include items before , loops last entry endlessly.
this file i'm working in:
<?php include ($_server['document_root'].'/wp-load.php'); require_once('program.php'); date_default_timezone_set("europe/oslo"); $datetime_now = date('y-m-d h:i:s'); $idag = date('y-m-d'); $imorgen = date("y-m-d", strtotime("+1 day")); // $datetime_now = '2010-01-04 09:29:00'; $i = 0; // // echo "<pre>"; // print_r($program); // echo "</pre>"; $program = getradioprogram(); foreach ($program $program_na) { if ($idag == substr($program_na['datotid'], 0, 10)) { if ($i == 0) $j = 0; else $j = $i-1; // echo "i: ".$i." j: ".$j; $program_dato = substr($program[$j]['datotid'], 0, 10); $program_tid = substr($program[$j]['datotid'], -8, 5); $program_tittel = str_replace('', '–', shorten($program[$j]['tittel'], 41)); $program_bilde = get_programimage(utf8_encode($program[$j]['tittel'])); $programleder = substr($program[$j]['tittel'], strpos($program[$j]['tittel'], " med ") + 0); $programbaretittel = explode(" med ",$program[$j]['tittel']); $programtittel = $programbaretittel['0']; $programspons = $program[$j]['spons']; } ?> <?php echo $program_dato.' - '.$program_tid; ?> <?php echo $programtittel; ?> <?php echo $programleder; ?> <?php $i++; } ?>
this program.php included
<?php function getradioprogram() { // open file, , read contents // if (current_user_can('manage_options')) { $attachment = get_attachment_url_by_slug('radioprogram_' . date("y") . '-' . date("m")); if (strpos($attachment[0]->guid, '.txt') === false) { $attachment = get_attachment_url_by_slug('radioprogram_' . date("y") . '-' . date("m") . '-2'); } $filename = get_attached_file($attachment[0]->id); // // if (current_user_can('manage_options')) { // var_dump($attachment); // } // var_dump($filename); // } else { // $filename = get_root()."/uploads/radioprogram_" . date("y") . "-" . date("m") . ".txt"; // } // var_dump($attachment); $handle = @fopen($filename, "r"); $contents = @fread($handle, @filesize($filename)); $contents = utf8_encode($contents); @fclose($handle); // manipulate contents $contents = explode("\n", $contents); $ukedager = array("mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lØrdag", "sØndag"); $maneder = array("januar", "februar", "mars", "april", "mai", "juni", "juli", "august", "september", "oktober", "november", "desember"); $i = 0; $num_days = 0; $program = array(); foreach ($contents $val) { if (strlen($val) < 2) $val = rtrim($val); else $val = ltrim($val); if (empty($val)) continue; // skip empty lines //if ((stripos($val, "nyheter ") !== false) or stripos($val, "pluss ") !== false) continue; // skip lines starting ... $val_small = substr($val, 0, 9); $is_day = false; $j = 0; foreach ($ukedager $ukedag) { // loop through week days if (strpos($val_small, $ukedag) !== false) { $val = trim(strstr($val, " "))."\n"; $val = str_replace(" ", " ", $val); $val = str_replace(" ", " ", $val); $date = explode(" ", $val); $day = str_replace(".", "", $date[0]); $month = trim($date[1]); $year = trim($date[2]); if ($day < 10) { $day = "0".$day; } $k = 0; ($k=0;$k<=11;$k++) { if ($maneder[$k] == $month) { $month_number = $k+1; if ($month_number < 10) { $month_number = "0".$month_number; } } } $num_days++; $is_day = true; } $j++; } // finn klokkeslett og tittel if (is_numeric($val{0})) { $klokkeslett = substr($val, 0, 5); $tittel = trim(substr($val, 6)); $tittel = str_replace("å", "å", $tittel); $tittel = str_replace("ø", "ø", $tittel); $tittel = str_replace("–", "‐", $tittel); $tittel = explode("- sponsor:", $tittel); if (!strpos($klokkeslett, " ")) { $klokkeslett = explode(".", $klokkeslett); if ($klokkeslett[0] == "01") $day++; // hack, might not work $date_final = date("y-m-d h:i:s", mktime($klokkeslett[0], $klokkeslett[1], 0, $month_number, $day, $year)); $program[$i]["datotid"] = $date_final; $program[$i]["tittel"] = $tittel[0]; $program[$i]["spons"] = $tittel[1]; } } $i++; } sort($program); return $program; } $program = getradioprogram(); ?>
this part of text file:
tirsdag 28. juni 2016 <- date radio 102 har innholdskonsesjon og sendeanleggskonsesjon 24/7-radio konsesjonsområde 11-01 (haugesund m.fl.) på sendenett 11-01.0. stasjonen sender, henhold til konsesjonsvilkårene, 376 minutter lokalt innhold døgnet. konsesjonen er gitt med en varighet fra 1. januar 2010 til 31. desember 2016. radio 102 oppfyller medietilsynets minstekrav til kompetanse innen radiodrift, økonomiske driftsforutsetninger og lokalt innhold. <- unnecessary information nyheter hver hele time fra 6.00 til 18.00 <-likewise time program title med(with) host (l= local programme) 06.00 din morgen med eivind og helge (l) 09.00 formiddag med hanne (l) 12.00 lunsj med egil (l) 15.00 ettermiddagsrush med monica (l) 18.00 max musikk med hanne (l) 20.00 max musikk med monica (l) 22.00 mot midnatt – de beste balladene på 102 (l) 24.00 neon, 102-musikk hele natta! (til 08.00) tirsdag 31. mai 2016 radio 102 har innholdskonsesjon og sendeanleggskonsesjon 24/7-radio konsesjonsområde 11-01 (haugesund m.fl.) på sendenett 11-01.0. stasjonen sender, henhold til konsesjonsvilkårene, 376 minutter lokalt innhold døgnet. konsesjonen er gitt med en varighet fra 1. januar 2010 til 31. desember 2016. radio 102 oppfyller medietilsynets minstekrav til kompetanse innen radiodrift, økonomiske driftsforutsetninger og lokalt innhold. nyheter hver hele time fra 6.00 til 18.00 06.00 din morgen med eivind thor magnar og helge (l) 09.00 formiddag med hanne (l) 12.00 lunsj med egil (l) 15.00 ettermiddagsrush med monica (l) 18.00 max musikk med hanne (l) 20.00 max musikk med monica (l) 22.00 mot midnatt – de beste balladene på 102 (l) 24.00 neon, 102-musikk hele natta! (til 06.00) onsdag 1. juni 2016 radio 102 har innholdskonsesjon og sendeanleggskonsesjon 24/7-radio konsesjonsområde 11-01 (haugesund m.fl.) på sendenett 11-01.0. stasjonen sender, henhold til konsesjonsvilkårene, 376 minutter lokalt innhold døgnet. konsesjonen er gitt med en varighet fra 1. januar 2010 til 31. desember 2016. radio 102 oppfyller medietilsynets minstekrav til kompetanse innen radiodrift, økonomiske driftsforutsetninger og lokalt innhold. nyheter hver hele time fra 6.00 til 18.00 06.00 din morgen med eivind, thor magnar og helge (l) 09.00 formiddag med hanne (l) 12.00 lunsj med monica (l) 15.00 ettermiddagsrush med egil (l) 18.00 max musikk med hanne (l) 20.00 max musikk med monica (l) 22.00 mot midnatt – de beste balladene på 102 (l) 24.00 neon, 102-musikk hele natta! (til 06.00)
this part of old script show item matching current time. plan make show items matching $idag
, able filter show items matching $imorgen
, on.
i have tried different variations of foreach
skips, i'm confused in i'm supposed put before. cleanup of code probarbly thing.
see if looking do:
// create function array mapping // note regex abilities not great, can guarantee // else can portion not necessary function filterempty($v) { $v = trim($v); return $v; } function getdatesfromfile($filename) { // set file array $getfile = file(__dir__.$filename,file_skip_empty_lines); // pre-assign variables $new = $arr = array(); $year = $mo = $day = false; // set today $today = date('y-n-j'); // set tomorrow $tommorow = date("y-n-j", strtotime("+1 day")); // set months in year $calendar = array( "januar", "februar", "mars", "april", "mai", "juni", "juli", "august", "september", "oktober", "november", "desember" ); // loop through file array foreach($getfile $key => $line) { // trim line $line = trim($line); // if empty, skip if(empty($line)) continue; // match trimmed line line: tirsdag 28. juni 2016 $regex = '/^([^\s|^\t]{1,})([\s|\t]{1,})([\d]{1,})\.([\s]{1,})([^\t]{1,})([\d]{4})/i'; $section = preg_match($regex,$line,$match); if($section) { $mo = trim($match[5]); $mo = array_search($mo,$calendar)+1; $isdate = $match[6].'-'.$mo.'-'.$match[3]; } if(!isset($isdate)) continue; elseif(($isdate != $today) && ($isdate != $tommorow)) continue; if(!isset($new[$isdate])) $new[$isdate] = array(); // if array set, go through sub-set data if(preg_match('/^([0-9\.]{4}).*/',$line)) { // again, better, i'm sure preg_match('/^([\d\.]{5})([^a-za-z]{1,})(.+)/i',$line,$details); $details = array_filter(array_map('filterempty',$details)); unset($details[0]); $details = array_values($details); if(strpos($details[1],' med ') !== false) $hosted = explode(' med ',$details[1]); elseif(strpos($details[1],'-') !== false) $hosted = explode('-',$details[1]); elseif(strpos($details[1],'–') !== false) $hosted = explode('–',$details[1]); $hosted = array_filter(array_map('filterempty',$hosted)); $new[$isdate][substr($details[0],0,2)] = $hosted; } } return $new; } $programs = getdatesfromfile('/test.txt'); foreach($programs $y => $yearrow) { echo '<ul>'.php_eol; foreach($yearrow $time => $pdata) { echo '<li><div>'.number_format($time,2).'</div><div>'.implode('</div><div>',$pdata).'</div></li>'.php_eol; } echo '</ul>'.php_eol; }
$programs
gives array:
array ( [2016-6-3] => array ( [06] => array ( [0] => din morgen [1] => eivind og helge (l) ) [09] => array ( [0] => formiddag [1] => hanne (l) ) [12] => array ( [0] => lunsj [1] => egil (l) ) [15] => array ( [0] => ettermiddagsrush [1] => monica (l) ) [18] => array ( [0] => max musikk [1] => hanne (l) ) [20] => array ( [0] => max musikk [1] => monica (l) ) [22] => array ( [0] => mot midnatt [1] => de beste balladene på 102 (l) ) [24] => array ( [0] => neon, 102 [1] => musikk hele natta! (til 08.00) ) ) [2016-6-2] => array ( [06] => array ( [0] => din morgen [1] => eivind, thor magnar og helge (l) ) [09] => array ( [0] => formiddag [1] => hanne (l) ) [12] => array ( [0] => lunsj [1] => monica (l) ) [15] => array ( [0] => ettermiddagsrush [1] => egil (l) ) [18] => array ( [0] => max musikk [1] => hanne (l) ) [20] => array ( [0] => max musikk [1] => monica (l) ) [22] => array ( [0] => mot midnatt [1] => de beste balladene på 102 (l) ) [24] => array ( [0] => neon, 102 [1] => musikk hele natta! (til 06.00) ) ) )
gives html (you'd have formatting):
<ul> <li><div>6.00</div><div>din morgen</div><div>eivind og helge (l)</div></li> <li><div>9.00</div><div>formiddag</div><div>hanne (l)</div></li> <li><div>12.00</div><div>lunsj</div><div>egil (l)</div></li> <li><div>15.00</div><div>ettermiddagsrush</div><div>monica (l)</div></li> <li><div>18.00</div><div>max musikk</div><div>hanne (l)</div></li> <li><div>20.00</div><div>max musikk</div><div>monica (l)</div></li> <li><div>22.00</div><div>mot midnatt</div><div>de beste balladene på 102 (l)</div></li> <li><div>24.00</div><div>neon, 102</div><div>musikk hele natta! (til 08.00)</div></li> </ul> <ul> <li><div>6.00</div><div>din morgen</div><div>eivind, thor magnar og helge (l)</div></li> <li><div>9.00</div><div>formiddag</div><div>hanne (l)</div></li> <li><div>12.00</div><div>lunsj</div><div>monica (l)</div></li> <li><div>15.00</div><div>ettermiddagsrush</div><div>egil (l)</div></li> <li><div>18.00</div><div>max musikk</div><div>hanne (l)</div></li> <li><div>20.00</div><div>max musikk</div><div>monica (l)</div></li> <li><div>22.00</div><div>mot midnatt</div><div>de beste balladene på 102 (l)</div></li> <li><div>24.00</div><div>neon, 102</div><div>musikk hele natta! (til 06.00)</div></li> </ul>