从csv文件中,我需要提取标题和值。两者都在后台访问。使用array_combine存储从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);
}
}
它的工作原理与这个样子
Name,Firstname,Organisation,
Bar,Foo,SO,
我只是出口我的Gmail联系人,并尝试使用上面的代码读取它们,但我得到以下错误
警告CSV文件: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不是真的有效吗?有什么建议么?
如果CSV以逗号结尾,这可能表示CSV实际上有4列,而不是3。最后一列显然没有名称,但有可能某些行在第4列中包含一个没有匹配'标题'的值。 – thaJeztah 2013-02-19 20:48:04