0

我有以下内容,并希望得到一些帮助:

function Display($line) {   
    $section = split(" +", $line);   
    for ($i = 1; $i <4; $i+=1){
        $section[$i];
    }       

    $countsection = count($section[3]); 
    $name = "$section[1] $section[2]";
    print "<td>$name</td>\n";
    print "<td>$countsection</td>\n";       
    $endvalue = end($section);       
    print "$endvalue";
}  

$allvalues = file("filename.txt");     
foreach ($allvalues as $checkline) {
   if (ereg("^[[:digit:]]", $checkline)) {
      Display($checkline);         
   }  
 }

这是一个基本的纲要:

我想

  • $counsection并被$endvalue计算在内。所以里面的值$countsection需要相加,对于$endvalue.
  • 如果 $name 是相同的 $name,则需要将它们合并在一起。

所以下面看起来像这样:

Name |  Count Section |  End Value
Mary Jane |  40 | 156
Tom John |  30  | 60

而不是这个:

Name | Count Section | End Value
Mary Jane | 10 | 50
Mary Jane | 10 | 50
Mary Jane | 20 | 56
Tom John | 10 | 20
Tom John | 15 | 30
Tom John | 5 | 10

文件内容示例:

12345    RM  100M 121      T     0400  1059  MWHA 110  Jane, Mary G    40

12345    RM  100M 122       W    0600  1059  MWHA 310  Jane, Mary P     40

12345    RM  100P 110    M  W    0800  0929  CLOU 122  John, Tom    39

12345    RM  100P 210    M  W    0930  1059  CLOU 205  John, Tom    40

提前致谢。

4

1 回答 1

0

你可以试试

$allvalues = getValues("log.txt");
print("<table>");
foreach ( $allvalues as $name => $value ) {
    print("</tr>");
    printf("<td>%s</td><td>%d</td><td>%d</td>", $name, $value[0], $value[1]);
    print("</tr>");
}
print("</table>");

输出

<table>
    <tr>
        <td>Jane, Mary G</td>
        <td>121</td>
        <td>40</td>
    </tr>
    <tr>
        <td>Jane, Mary P</td>
        <td>122</td>
        <td>40</td>
    </tr>
    <tr>
        <td>John, Tom</td>
        <td>320</td>
        <td>79</td>
    </tr>
</table>

例子

Jane, Mary G        121         40
Jane, Mary P        122         40
John, Tom           320         79

使用的功能

function getValues($file) {
    $lines = file($file);
    $values = array();
    foreach ( $lines as $line ) {
        $line = trim($line);
        if (empty($line))
            continue;
        $line = explode("  ", $line);
        if (isset($values[$line[11]])) {
            $values[$line[11]][0] += strstr($line[3], " ");
            $values[$line[11]][1] += $line[13];
        } else {
            $values[$line[11]] = array(strstr($line[3], " "),$line[13]);
        }
    }
    return $values;
}
于 2012-11-04T20:48:00.760 回答