2016-12-10 4 views
0

csvファイルには列ヘッダーがあります。私が探しているのは、どうすれば列番号から番号を取り出すことができるかということです。第2列"XYZxxxx"コードを含む行のみからの9(通貨量)とcol no。 10?今までPHPは配列に.csvファイルを解析し、特定の行の特定の要素のみを追加します。

私のアプローチは、次のとおりです。

  1. は、PHPの配列にCSVファイルの内容を解析します。
  2. コンテンツを異なる行に展開します。
  3. 「XYZxxxx」を含む行を確認します。

私は、通貨の量と通貨の種類をこれらから抜き出して、同じタイプで合計する方法を理解できません。

"EUR"、 "GBP" & "USD"の値を別々に見て、その結果に基づいて行を異なる変数にグループ化することは考えていますが、それは正しいアプローチですか、それとも私は思っていますか?

+1

コードを表示してください。 –

答えて

1

いくつかの簡単な解決策:

$array = [ 
    [10, 'DOLLAR'], 
    [20, 'DOLLAR'], 
    [25, 'EURO'], 
    [20, 'DOLLAR'], 
    [25, 'EURO'], 
]; 

$sums = []; 
foreach ($array as $item) { 
    if (empty($sums[$item[1]])) { 
     $sums[$item[1]] = $item[0]; 
    } else { 
     $sums[$item[1]] += $item[0]; 
    } 
} 

echo'<pre>',print_r($sums),'</pre>'; 
//Array 
//(
// [DOLLAR] => 50 
// [EURO] => 50 
//) 

拡張例は:

$array = [ 
    [10, 'DOLLAR', 'XYZ1010'], 
    [20, 'DOLLAR', 'ABC'], 
    [25, 'EURO', 'XYZ1010'], 
    [20, 'DOLLAR', 'XYZ1010'], 
    [25, 'EURO', 'ABC'], 
]; 

$sums = []; 
foreach ($array as $item) { 
    if (strpos($item[2], 'XYZ') !== false) { 
     if (empty($sums[$item[1]])) { 
      $sums[$item[1]] = $item[0]; 
     } else { 
      $sums[$item[1]] += $item[0]; 
     } 
    } 
} 

echo'<pre>',print_r($sums),'</pre>'; 
//Array 
//(
// [DOLLAR] => 30 
// [EURO] => 25 
//) 

$gbpなど、$dolような名前を持つ変数の多くを作成するキーで1つのアレイを使用していないいます。

+0

私の問題は、フィルタリングされた配列を追加するまで取得するロジックです。 eur = 0、gbp = 0、usd = 0、 "列番号2の値が" XYZxxx "のforeach行: 列番号10 = EURの場合はeur = eur + col no。 9値」とする。 elseif col no。 10 = GBP gbp = gbp + col 9値; else usd = usd + col no.9 value。 – sklrboy

+0

そして、どこに問題がありますか? –

+0

私はcsvファイルのこれらの列をどのように指定すればいいのかわかりませんが、現在の行のどちらの列がどれであるかをPHPに伝える方法を意味します。 – sklrboy

関連する問題