数组 - 将值组合在一起

时间:2012-11-04 19:53:38

标签: php arrays count

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

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

提前致谢。

1 个答案:

答案 0 :(得分: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;
}