2017-01-16 14 views
2

入力ファイル(data.txt)を取得したいとします.1番目の列は名前、2番目は2進数です...何行にもかかわらずファイル全体を処理しますそれは... 3列の出力を得る... 1)各名前の反復回数... 2)名前... 3)合計値(4,49 + 1,22 + 9,15)PHPプロセスの2列データ入力

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) 

それらが一致した場合に私の考えは、最初の2次元配列を作成することでした...その後、次のと比較し、第一の名前を取り、 - >の値を追加して、上に行く...彼らは、ドンが」 t match - >出力の新しい行

私は配列を取得することができましたが、その後、 "ループ"部分cで失われましたomparing +配列項目の計算。

$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); 

答えて

3

explode()結果の最初の部分を2番目の配列のキーとして使用し、存在するかどうかを確認します。存在する場合は、現在の値をその要素に追加します。存在しない場合は、その要素で初期化します。

$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'] 
    ); 
} 
関連する問題