如何在.csv文件中获取某些列

时间:2013-03-31 04:42:00

标签: php file-upload csv

嘿伙计们,所以我已经有一些代码可以获取.csv文件中列的名字,姓氏和电子邮件,但它无法正常工作,我可以用手来解决这个问题。

Heres当前代码:

//this file is used to grab the usernames of the csv file and put them in a session, returning it memberinterface that will open a dialog box with the usernames
$seterror = 0;

function returnBack(){

    header("Location:../memberinterface.php?getmsg=15");
    exit;

}
function returnBackfile(){

    header("Location:../memberinterface.php?getmsg=16");
    exit;
}
if (!empty($_FILES['csvfile']['error'] ) )
    {

        $seterror = 1;
        returnBack();

    } 
    if (empty($_POST['firstname'])){

        $seterror =1;
        returnBack();
    }
    if (empty($_POST['lastname'])){
        $seterrro =1;

        returnBack();
    }
    if (empty($_POST['email'])){
        $seterror =1;

        returnBack();
    }
    if ($seterror !== 1){

    $file = $_FILES['csvfile']['tmp_name']; 

    $handle = fopen($file , "r");

    $fileop = fgetcsv($handle,1000,",");

    $fileop=array_map("strtoupper",array_map("trim",$fileop));

    $firstname_index = array_search(strtoupper($_POST["firstname"]),$fileop); <!-----these right here are not working correctly and will always send me back with the error, it does not find the firstname column? and same with the other ones.
    if ($firstname_index===false){

        returnBack();
    }
    $lastname_index = array_search(strtoupper($_POST['lastname']),$fileop);
    if ($lastname_index===false){

        returnBack();
    }
    $email_index = array_search(strtoupper($_POST['email']),$fileop);
    if ($email_index===false){

        returnBack();
    }
        //open file and store values
        $j = 0;
        while (($fileop=fgetcsv($handle)) !== false)
        {

            $fileop=array_map("trim",$fileop);
            $firstname[$j] = $fileop[$firstname_index];
            if (empty($firstname[$j])){ 

            returnBackfile();

            }

            $lastname[$j] = $fileop[$lastname_index];
                if (empty($lastname[$j])){

            returnBackfile();

            }
            $email[$j] = $fileop[$email_index];
                if (empty($email[$j])){

            returnBackfile();


            }
            $j++;
        }

        print_r($firstname);


    }

所以当我打印$ firstname值时,它打印出.csv文件中的值,但是包含所有值?

所以回顾一下我试图让它从.csv文件中获取firstname,lastname和email列,将它存储在$ firstname数组,$ lastname数组等中......

如果你能提供帮助,我会很感激!!

大卫

更新:

var_dump($fileop); var_dump($POST);放在$firstname_index = array_search($_POST["firstname"],$fileop);

之后

我使用.csv文件获得了这些结果:

    array(1) { [0]=> string(162) "FIRSTNAME LASTNAME    EMAIL   PHONE   COMBINED SINGLE LIMIT   BODILY INJURY EACH PERSON   BODILY INJURY EACH ACCIDENT PROPERTY 
DAMAGE  STATUS  ADDRESS NOTES   STATUS CHANGE DATE" } 
NULL Array ( [0] => Hank    Aaron biga.@gsadf.com   777.777.7777    '0  20000   
40000   10000   Non-Active [1] => Fred  Astaire astaire@test.com    222.431.5843    '0  
'0  '0  '0  Open    98 Ocean Blvd [2] => Jim    Belushi biga.@gsadf.com 
333.333.3333    '0  '0  '0  '0  Open    98 Ocean Blvd [3] => Charlie    
Brown   charlie@test.com    909.111.1111    '0  '0  '0  '0  Open    98 
Ocean Blvd [4] => Carol Burnett burnett@test.com    911.911.9999    '0  '0  '0  
'0  Enrolled - PCG to Follow-Up 98 Ocean Blvd [5] => Bill   Cosby   
cosby@test.com 989.989.9898 '0  100000  300000  100000  Confirmed   23 Surf Rd 
[6] => Charles  Dickens dickens@test.com    897.333.3333    '0  '0  '0  '0  
Non-Active - Driver Chose Non-Compliance    23 Surf Rd [7] => Walt  Disney  
disney@test.com 909.909.9090    '0  '0  '0  '0  Non-Active - Driver Chose 
Non-Compliance  23 Surf Rd [8] => Bob Dylan dylan@test.com  333.444.5555    '0  '0  
'0  '0  Enrolled - Agent Emailed    23 Surf Rd [9] => Thomas    Edison  
edison@test.com 765.222.1111    '0  '0  '0  '0  Enrolled - Agent Emailed    
23 Surf Rd [10] => Harrison Ford    harrison@test.com   345.543.5555    '0  '0  
'0  '0  Enrolled - Agent Emailed    23 Surf Rd [11] => Bill Gates 
gates@test.com  123.456.7890    350000  '0  '0  '0  Enrolled - Employee Follow-
Up Required 16 Tulip Ln [12] => Tom Hanks   hanks@test.com  777.888.9999    '0  '0  
'0  '0 Enrolled - Agent Emailed 16 Tulip Ln [13] => Alfred  Hitchcock   
alfred@test.com 878.000.9999    '0  '0  '0  '0  Non-Active - Other  16 
Tulip Ln [14] => Michael    Jackson jackson@test.com    123.123.1234    '0  '0  
'0  '0  Non-Active - PolicyHolder Cancelled Additional Interest 16 Tulip Ln [15] => 
Michael Jordan  michael@test.com 888.888.8888   '0  '0  '0  '0  Non-Active 
- Employee Not Covered Under Listed Policy  16 Tulip Ln [16] => John    Lennon  
lennon@test.com '098.765.5432   '0  '0  '0  '0 Non-Active - Insurance Cancelled 
16 Tulip Ln [17] => Joe Lewis   b@hotmail.com   888.999.1111    '0  15000   
30000   5000    Confirmed   4765 E Palm Rd [18] => Peyton   Manning peyton@test.com 
111.222.3333    '0  '0  '0  '0  Enrolled - Agent Emailed    4765 E Palm 
Rd [19] => Marilyn  Monroe  monroe@test.com 212.121.1212 '0 '0  '0  '0  
Enrolled - Policyholder Follow-Up Required  4765 E Palm Rd [20] => Elvis    Presley 
elvis@test.com  909.000.8761    '0  '0  '0  '0  Enrolled - New Carrier 
Being Processed 4765 E Palm Rd [21] => Dan  Rather  rather@test.com 333.333.8888    '0  
25000   50000   15000   Confirmed   909 Kodak Ln [22] => Chris  Rhodes 
crhodes@rhodesretail.com    916-205-2474 '0 '0  '0  '0  Open    909 Kodak 
Ln [23] => William  Shakespeare william@test.com    444.444.4444    '0  
100000  300000 100000   Confirmed   926 Maple St [24] => Meryl  Streep  
streep@test.com 411.411.4111    '0  100000  300000  100000  Confirmed   412 East 
3rd St [25] => Mark Twain   twain@test.com  323.323.3232    '0  '0  '0  '0  
Enrolled - Agent Emailed    412 East 3rd St [26] => Darth   Vader   darth@test.com  
874.321.4444    '0  25000   50000 15000 Confirmed   1234W U Parkway [27] => 
George  Washington  george@test.com 876.321.1234    '0  100000  300000  100000  
Confirmed   12 oak blvd [28] => Robin   Williams    rwilliams@test.com  
444.555.6666    '0  '0  '0  '0  Open    12 oak blvd )

1 个答案:

答案 0 :(得分:1)

默认情况下,fgetcsv()使用逗号作为列分隔符。您的文件以制表符分隔,因此您需要明确指定分隔符参数。

变化:

$fileop = fgetcsv($handle,1000,",");

为:

$fileop = fgetcsv($handle,0,"\t");

并改变:

while (($fileop=fgetcsv($handle)) !== false)

为:

while (($fileop=fgetcsv($handle, 0, "\t")) !== false)