解析CSV文件时访问上一循环中的变量名称

时间:2016-04-25 14:13:17

标签: php laravel csv phpexcel laravel-excel

我正在尝试解析用户信息的CSV文件。 CSV的格式为:

userid,username,userlocation
notecontent, notedate
notecontent, notedate
notecontent, notedate
notecontent, notedate
userid,username,userlocation
notecontent, notedate
notecontent, notedate

你可以看到它是一团糟。每个用户行下的注释与其相关,但不包含诸如"客户端ID"等的密钥。

到目前为止,这个Laravel应用程序的PHP是:

Excel::load("storage/app/notes.csv", function($reader) {
    $reader->each(function($row) { //Loop through row by row

        if (strlen($row->client_id) == 5) {
            $loopclient = $row->client_id;
            $this->line('client'.$loopclient);
        } else {
            //Our note should have client ID of loopclient
            $this->info($loopclient.": ".$row->client_id);
        }

    });
 })->get();

通过查看单元格是否为5个字符来检查行是否为注释或ID。如果是,我想设置$ loopid并移动到下一行。然后,如果检查显示该行是一个注释,则$ loopid var应该始终是最先前客户端的ID。

有谁知道为什么这不会起作用,或者更好的方法呢?

我收到错误:

Undefined variable: loopclient

它在第一个循环中找到ID,但在第二个循环中不可用?如何设置和保存此值?

非常感谢

1 个答案:

答案 0 :(得分:1)

函数中声明的变量仅在该函数的范围内,您必须通过引用传递外部变量才能停止“上一个”值,例如:

In [309]: pd.DataFrame([(','.join(el[0]), el[1]) for el in bigrams])
Out[309]:
                            0   1
0              a,grossir,et,a  74
1          un,avis,de,passage  68
2        le,facteur,est,passé  67
3            Vêtements,+,ou,-  63
4           +,ou,-,similaires  62
5          vous,ne,pouvez,pas  54
6  sinon,une,petite,recherche  53