0

fgetcsv 関数を使用し、最後まで csv ファイルを反復処理する while ループがあります。ループでは、特定の列の値を新しい配列に追加したいと考えています。

必要な列の値をエコーするため、すべてが機能します。ただし、配列に追加する行を入れると、機能しません。PHPコードの後に​​出力するHTMLテーブルがありますが、行を使用して配列に追加すると機能しません。

私はインターネットを見てきましたが、私が見たものはすべて私がやった方法でやっているので、少し混乱しています.

これが私のコードです:

$amountRecords = 0;
$totalValue = 0;
$valueArray = array();

$handle = fopen('data.csv', 'r');
// to skip the header names/values 
fgetcsv($handle);

while($row = fgetcsv($handle, "\r"))
{

    $valueArray[$amountRecords] += $row[1]; // THIS IS THE LINE THAT IS NOT WORKING
    $totalValue = $totalValue + $row[1];
    $amountRecords++;

}
4

2 に答える 2

2

あなたのコードにはいくつかの奇妙さがあります。$amountRecords毎回インクリメントしているため、同じインデックスに$valueArray2 回アクセスすることはありませんが、各要素に値を追加しています。おそらく、単に?$valueArray[$amountRecords] = $row[1];の代わりに値を代入することを意味しています。+=

その場合は、配列の最後にアイテムを追加しようとしているだけのように見え、列 1 を独自の配列に抽出しています。array_pushまたはarray[]=構文を使用する必要があります。

while($row = fgetcsv($handle, "\r"))
{
    // Add $row[1] to the end of $valueArray
    $valueArray[] = $row[1];

    $totalValue = $totalValue + $row[1];
}

+=演算子は、既存の値に何かを追加するためのものです。入力a += bは、入力と同じa = a + bです。次の行でその演算子を使用する必要があります。次に例を示します。

 $totalValue += $row[1];

最後の提案として、基本的なデバッグを行う方法を学びます。ループが機能しない場合は、各反復中にループが何をしているかを表示してください。var_dump変数を調べて、変数に含まれていると思われるものが実際に含まれていることを確認するために使用します。を使用すると、それが正しいインデックスvar_dump($row)であることを確認するのに特に役立ちます。$row[1]

echo "Before loop\n";

while($row = fgetcsv($handle, "\r"))
{
    echo '$row contains: ';
    var_dump($row);

    $valueArray[] += $row[1]; // THIS IS THE LINE THAT IS NOT WORKING

    echo '$valueArray now contains ':
    var_dump($valueArray);

    $totalValue = $totalValue + $row[1];
}

echo "After loop\n";
于 2012-08-18T14:08:38.850 に答える
0

あなたのスクリプトについての私の理解からは、$valueArray[$amountRecords] += $row[1];論理的な意味はありません$amountRecords ++;

あなたのスクリプトはこのようにうまくいくと思います

while ( $row = fgetcsv($handle, "\r") ) {

    $valueArray[] = $row[1]; // Put all Row[1] Into a array
    $totalValue += $row[1]; // Sum total Value 
    $amountRecords ++; //Get Record Count
}
于 2012-08-18T14:17:00.637 に答える