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 に答える