我正在尝试过滤大.txt
个文件中的某些项目,以仅显示与当前日期匹配的项目。我可以让它显示与当天匹配的项目,但它似乎也包括之前的项目,它也无休止地循环最后一个条目。
这是我正在处理的文件:
<?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 as $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++;
}
?>
这是 program.php ,其中包含
<?php
function getRadioProgram() {
// open the file, and read the 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 the 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 as $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 with ...
$val_small = substr($val, 0, 9);
$is_day = false;
$j = 0;
foreach ($ukedager AS $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;
for ($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();
?>
这是文本文件的一部分:
TIRSDAG 28. JUNI 2016 <- date
Radio 102 AS har innholdskonsesjon og sendeanleggskonsesjon for 24/7-radio i konsesjonsområde 11-01 (Haugesund m.fl.) på sendenett 11-01.0. Stasjonen sender, i henhold til konsesjonsvilkårene, 376 minutter lokalt innhold i døgnet. Konsesjonen er gitt med en varighet fra 1. Januar 2010 til 31. Desember 2016. Radio 102 AS 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 AS har innholdskonsesjon og sendeanleggskonsesjon for 24/7-radio i konsesjonsområde 11-01 (Haugesund m.fl.) på sendenett 11-01.0. Stasjonen sender, i henhold til konsesjonsvilkårene, 376 minutter lokalt innhold i døgnet. Konsesjonen er gitt med en varighet fra 1. Januar 2010 til 31. Desember 2016. Radio 102 AS 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 AS har innholdskonsesjon og sendeanleggskonsesjon for 24/7-radio i konsesjonsområde 11-01 (Haugesund m.fl.) på sendenett 11-01.0. Stasjonen sender, i henhold til konsesjonsvilkårene, 376 minutter lokalt innhold i døgnet. Konsesjonen er gitt med en varighet fra 1. Januar 2010 til 31. Desember 2016. Radio 102 AS 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)
这是旧脚本的一部分,以前只显示与当前时间匹配的项目。该计划是仅显示与$idag
匹配的项目,然后才能将其过滤为仅显示与$imorgen
匹配的项目,依此类推。
我尝试了foreach
跳过的不同变体,但我很困惑,我应该把它放在之前。清理代码可能也是一件好事。
答案 0 :(得分:0)
看看这是否是您要做的事情:
// Create a function for array mapping
// Note that my regex abilities are not great, so I can guarantee
// someone else can do it to where this portion is not necessary
function filterEmpty($v)
{
$v = trim($v);
return $v;
}
function getDatesFromFile($filename)
{
// Set the file to an array
$getFile = file(__DIR__.$filename,FILE_SKIP_EMPTY_LINES);
// Pre-assign some 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 all the months in the year
$calendar = array(
"JANUAR",
"FEBRUAR",
"MARS",
"APRIL",
"MAI",
"JUNI",
"JULI",
"AUGUST",
"SEPTEMBER",
"OKTOBER",
"NOVEMBER",
"DESEMBER"
);
// Loop through the file array
foreach($getFile as $key => $line) {
// Trim the line
$line = trim($line);
// If empty, skip
if(empty($line))
continue;
// Match the trimmed line for this 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 is set, go through the sub-set data
if(preg_match('/^([0-9\.]{4}).*/',$line)) {
// Again, someone could do this 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 as $y => $yearRow) {
echo '<ul>'.PHP_EOL;
foreach($yearRow as $time => $pData) {
echo '<li><div>'.number_format($time,2).'</div><div>'.implode('</div><div>',$pData).'</div></li>'.PHP_EOL;
}
echo '</ul>'.PHP_EOL;
}
$programs
为您提供此数组:
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)
)
)
)
给你HTML(你必须做一些格式化):
<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>