-4

私はPHPが初めてで、ほとんど問題はありません。次のようなコードがあります。

$file = $_FILES['sel_file']['name'];

$chk_ext = explode(".",$file);

if(strtolower($chk_ext[1]) == "txt")
{

    $filename = $_FILES['sel_file']['tmp_name'];
    $handle = fopen($filename, "r");

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
    {
        $array = array( $data[0]);
        foreach( $array as $value )
        {
            $number=$value;
        }

        $obj=new Sender("$number");
    }

    header("location:bulk.php?msg=send");
}
else
{
    header("location:bulk.php?invalid=file");
    exit();

}
$obj->Submit ();

問題は、最後の値のみが のテキスト ファイルから$obj=new Sender("$number");出力されることです。助けてください。

4

4 に答える 4

2

fgetcsv() はすでに配列を返すため$array = array( $data[0]);、フィールドの配列の最初の要素である $data のみを取得することを意味します。foreach ループでは、$array 変数を $data に置き換えるだけです。ループは次のようになります。

foreach( $data as $value )
    {
        $number=$value;
    }

    $obj=new Sender("$number");

$data のすべての要素を $number 内に保持し、再度ループして $number に再度配置し、上書きすることを意味します。foreach ループの後、$number の値は行の最後のフィールドになります。

$obj=new Sender("$number");すべての行のすべての要素が Sender に配置されるように、ループ内に行を配置する必要があります。

于 2013-03-01T03:33:11.440 に答える
1

驚きはありません。$numberすべての値をループして、最後に取得した値で継続的に上書きします。ループが終了すると、最後のループだけになります。

おそらく、次のようなものが必要です。

foreach($array as $value) {
   $obj = new Sender($value);
}

あなたのコードもほとんど意味がありません。アップロードされたファイル (おそらく CSV) を取得し、そこから 1 行を読み取り、その行から FIRSt 値を抽出します。値を強制的に配列に入れ、配列内のその 1 つの値 (配列内の唯一の値)を読み戻し、それを使って何かを行います。

foreach が値を上書きしていなかったとしても、ループする値は 1 つしかありません。

于 2013-03-01T02:55:21.677 に答える
0

$numberこれは、反復ごとに新しい値を割り当てるためです。その変数に追加する必要があるか ( $number .= $value)、配列に追加する必要があります ( $number[] = $value)。

于 2013-03-01T02:56:18.650 に答える
0

反復ごとに number の内容を上書きしています。代わりに、各値をインクリメントする要素に格納する配列を number にすることができます。

foreach( $array as $value )
 {
   $number[]=$value;
 }

$obj=new Sender($number);
于 2013-03-01T02:56:33.957 に答える