-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,从中读取一行,从该行中提取 FIRSt 值。强制将该值放入一个数组,然后读回数组中的那个 ONE 值(数组中的唯一值),并对其进行处理。

即使您的 foreach 没有覆盖该值,您仍然只有一个值可以循环。

于 2013-03-01T02:55:21.677 回答
0

You are overwriting the contents of number each iteration. You can instead make number an array which stores each value at incrementing elements.

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

$obj=new Sender($number);
于 2013-03-01T02:56:33.957 回答
0

那是因为您$number在每次迭代中都分配了一个新值。您需要附加到该变量 ( $number .= $value),或者需要将其添加到数组 ( $number[] = $value)。

于 2013-03-01T02:56:18.650 回答