我已经存储了一个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...
答案 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)
);