PHP进程2列数据输入

时间:2017-01-16 13:49:59

标签: php arrays

我想要一个输入文件(data.txt),其中第一列是名称,第二列是2位十进制数...处理整个文件,无论它有多少行...并获取一个3列的输出... 1)每个名称的迭代次数... 2)名称... 3)值的总和(4,49 + 1,22 + 9,15)

input sample:
name 111    4,49
name 111    1,22
name 111    9,15
name 222    1,99
name 222    1,22
name 333    4,49
name 333    25,80
name 333    11,11
name 333    4,49
name 333    4,49
name 333    25,80
name 333    4,49
name 444    14,95
name 444    9,15
etc. ...
(hundreds of lines)


output sample:
3   name 111    14,86
2   name 222    3,21
7   name 333    80,67
etc. ...
(all data like this)

我的想法是首先创建一个二维数组...然后取第一个名称,与下一个名称进行比较,如果它们匹配 - >将这些值相加并继续...如果它们不匹配 - >输出中的新行

我能够获得数组,但是在比较+计算数组项目的“循环”部分中迷失了。

$lines = file('data.txt'); // Reads an entire file into an array

$two_array = array(); // creates two-dimensional array
foreach($lines AS $row){
    $two_array[] = explode("\t", $row); // Explode each row by TAB to each row of two_array
}

print_r($two_array);

1 个答案:

答案 0 :(得分:3)

将explode()结果的第一部分用作第二个数组中的键,并检查它是否存在。如果是,则将当前值添加到该元素,如果不是,则使用它初始化它。

$lines = file('data.txt'); // Reads an entire file into an array

$two_array = array(); // creates two-dimensional array
foreach($lines AS $row){
    list($key, $value) = explode("\t", $row); // Explode each row by TAB to each row of two_array
    if (isset($two_array[$key])) {
        // already exists, add it to the existing value
        $two_array[$key]['sum'] += $value;
        $two_array[$key]['count'] += 1;
    } else {
        // initialize
        $two_array[$key]['sum'] = $value;
        $two_array[$key]['count'] = 1;
    }
}

foreach ($two_array as $key => $value) {
    printf(
        '%s -- %s -- %s', // whatever format you need
        $value['count'],
        $key,
        $value['sum']
    );
}