Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从文本文件中提取特定数据并创建表_Php_Html_Readfile - Fatal编程技术网

Php 从文本文件中提取特定数据并创建表

Php 从文本文件中提取特定数据并创建表,php,html,readfile,Php,Html,Readfile,大家好,我是PHP编程新手,我只是想学习更多关于如何处理文件的知识 我有一个文本文件,里面有一些数据,如下所示 我希望在表中有类似的输出 POlicy Day Time TU_TOPS_VM-Full_30D_00_2 Saturday Saturday 19:50:00 TU_QW_VM-FULL_30D_18_01 Sunday 02:05

大家好,我是PHP编程新手,我只是想学习更多关于如何处理文件的知识

我有一个文本文件,里面有一些数据,如下所示

我希望在表中有类似的输出

POlicy                               Day              Time
TU_TOPS_VM-Full_30D_00_2 Saturday    Saturday         19:50:00
TU_QW_VM-FULL_30D_18_01              Sunday           02:05:00
TU_GPAS_FULL-VM_30D_18_01            Friday           22:00:00
从我的代码中,我能够获得策略名称并将数据组织到表列中

代码的输出

POlicy                        Day     Time
TU_TOPS_VM-Full_30D_00_2
TU_QW_VM-FULL_30D_18_01
到目前为止我所能做的

<?php
$lines= file('schedule');
$lines = preg_grep("/Policy Name:/", $lines);
echo'
<table>
<tr>
<td>POlicy</td>
<td>Day</td>
<td>Time</td>
</tr>';
foreach ($lines as $policy) {
$find="Policy Name:";
$replace="";
$po= (str_replace($find,$replace,$policy));
echo '
<tr>
<td>'.$po.'<br></td>
</tr>
</table>';
}
?>
我如何提取日期和时间并将其组织在政策之外
name?

当您使用preg\u grep时,您正在丢弃其他行。相反,在所有行上循环,检查它是哪种类型的行

此外,它不应位于循环内部,而应仅位于循环的末尾

<?php
$lines= file('schedule', FILE_IGNORE_NEW_LINE);
echo'
<table>
<tr>
<td>POlicy</td>
<td>Day</td>
<td>Time</td>
</tr>';
foreach ($lines as $line) {
    if (strstr($line, 'Policy Name:')) {
        $policy = str_replace('Policy Name:', '', $line);
    } elseif (preg_match('/(\w+)\s+(\d\d:\d\d:\d\d)\s+-->/', $line, $match)) {
        $day = $match[1];
        $time = $match[2];
    echo "
<tr>
<td>$policy</td>
<td>$day</td>
<td>$time</td>
</tr>";
    }
}
echo "\n</table>";
?>

@巴尔马写了一个很好的答案。这里有一个不同的策略,我想控制我的数组在哪里中断,也就是说,不是在每一行,因为我不确定你的换行符在哪里。此外,不太具体的匹配为您的输入提供了更多的支持,这对您来说可能不是问题

<?php    
$string = file_get_contents('schedule') ; // read the file in as a string, not an array              
$text_array = explode("Policy Name:", $string) ; // break the string into an array of strings at each "Policy Name:"

foreach($text_array as $entry){
        $entry = preg_replace('/\s+/', ' ',$entry) ; // conflate whitespace into a single space for delimiting
        $sub_entry_array = explode(' ', $entry) ; // split each substring into an array
        $table_rows .= "<tr><td>$sub_entry_array[1]</td><td>$sub_entry_array[4]</td><td>$sub_entry_array[5]</td></tr>" ; // display the array values we want
}

echo "<table><tr><th>Policy</th><th>Day</th><th>Time</th></tr>$table_rows</table>" ;
?>

每个策略有两个天/时间组合。您的示例只提供一天/时间组合。你想用哪一个,箭头左边的还是箭头右边的?只有第一个?你能把最后一个扔掉吗?嗨,Barmar,非常感谢你的及时回答,看起来它工作得很好,我昨天试着使用preg_match选项,但我不太明白。非常感谢你的时间,我会玩一点代码。谢谢你的建议,把桌子放在环里。
<?php    
$string = file_get_contents('schedule') ; // read the file in as a string, not an array              
$text_array = explode("Policy Name:", $string) ; // break the string into an array of strings at each "Policy Name:"

foreach($text_array as $entry){
        $entry = preg_replace('/\s+/', ' ',$entry) ; // conflate whitespace into a single space for delimiting
        $sub_entry_array = explode(' ', $entry) ; // split each substring into an array
        $table_rows .= "<tr><td>$sub_entry_array[1]</td><td>$sub_entry_array[4]</td><td>$sub_entry_array[5]</td></tr>" ; // display the array values we want
}

echo "<table><tr><th>Policy</th><th>Day</th><th>Time</th></tr>$table_rows</table>" ;
?>