无法在PHP中比较2个数组(不区分大小写)

时间:2014-06-23 10:13:04

标签: php mysql arrays csv

我已经存储了一个event_id列表,其中包含有关csv文件中50个事件的数据。我有50个带有相应event_id的csv文件,其中包含将参加该事件的user_id列表。实际参加该事件的人员列表保存在mysql DB中。所以,现在想比较两个列表,看看谁实际参加了这些活动。但是,存储在csv中的数据是大写的,而mysql中的数据是以小写形式存储的。

Master Event CSV File
event_id  event_date
001       x/x/2014
002       x/x/2014
003       x/x/2014

50 event csv files (each file is named after the event_id):

CSV file name: 001.csv
user_id   first_name
cust_123       Chris  
cust_234       John
cust_345       David

所以我到目前为止所做的是循环主事件csv以获取event_id,并且使用该event_id,我试图将用户列表存储在$ data数组中。然后,我在$ checkUser中检索db的实际出勤列表。最后。我使用array_intersect来比较两个数组。

$con= new PDO('mysql:host=localhost;dbname=test',$username,$password);

//Master CSV File containing all user id and user info
$file_handle = fopen($fileName, "r");

//while loop to loop through Master CSV to get the event id
$i = 0;
while ($i < 50) {

    //Get the event id from CSV Master file
    $file_line = fgetcsv($file_handle , 1024);
    $event_id = $file_line[0];

    //open csv file containing user id for each event   
    $csv_handle = fopen("file.csv", "r");

    //Get list of user_id from csv
    $data = array();
    while($row = fgetcsv($csv_handle)) {
    $data[] = $row[0];
}

    //Get list of user_id from mysql
    $sql = $con->prepare("SELECT user_id FROM user WHERE event_date = ");
    $sql -> execute();
    $checkUser = array();
    while($result = $sql ->fetch(PDO::FETCH_ASSOC)) {
        $checkUser = $result['user_id'];
}

    //Compare 2 arrays for matches
    user_intersect = array_intersect($checkUser, $data);

    $i++;
}

?>

我收到以下错误。任何帮助都会很棒。

Notice: Array to string conversion in C:\wamp\www...

1 个答案:

答案 0 :(得分:1)

在这一行

$checkUser = $result['user_id'];

即使您在$checkUser循环之前将while声明为数组,它也会充当一个变量,它会在每次迭代时被覆盖,因此只包含循环中的最后一个值。所以它不是一个数组,而只是一个变量。

为了使它成为一个数组,你需要将其用作:

$checkUser[] = $result['user_id'];

[]表示当前项目正在添加到现有数组而不是覆盖它。

修改

为了处理不区分大小写的值,您可以使用array_map

$user_intersect = array_intersect(
                     array_map('strtolower', $checkUser), 
                     array_map('strtolower', $data)
                   );