我需要从 csv 文件中提取标题和值。两者都稍后在前端访问。
$header = array();
$contacts = array();
if ($request->isMethod('POST')) {
if (($handle = fopen($_FILES['file']['tmp_name'], "r")) !== FALSE) {
$header = fgetcsv($handle, 1000, ",");
while (($values = fgetcsv($handle, 1000, ",")) !== FALSE) {
// array_combine
// Creates an array by using one array for keys
// and another for its values
$contacts[] = array_combine($header, $values);
}
fclose($handle);
}
}
它适用于看起来像这样的 csv 文件
Name,Firstname,Organisation,
Bar,Foo,SO,
我刚刚导出了我的 gmail 联系人并尝试使用上面的代码读取它们,但出现以下错误
警告:array_combine() [function.array-combine]:两个参数应该有相同数量的元素
gmail csv 看起来像这样
Name,Firstname,Organisation
Bar,Foo,SO
最后一个漏掉,
是错误的原因吗?出了什么问题以及如何解决?
我在 SO 上找到了这个
function array_combine2($arr1, $arr2) {
$count = min(count($arr1), count($arr2));
return array_combine(array_slice($arr1, 0, $count),
array_slice($arr2, 0, $count));
}
这可行,但它会跳过名称字段,并且并非所有字段都被合并。这是因为 gmail csv 不是真的有效吗?有什么建议么?