我读了一些csv文件,并使用array_combine:
将内容映射到字段名称$csv = array();
$a = array('some fields');
$b = array_combine($a, $csv);
但是,如果$ a中的字段名称与我在csv文件中指定的字段名称不同,则该方法将失败并显示警告
array_combine() [function.array-combine]:两者 参数应该具有相同的数字 元素
我尝试使用try和catch但这不起作用。作为一个说明,我正在使用zend框架。
任何想法如何捕捉警告?
答案 0 :(得分:2)
抓取CSV中的列数,然后将其与$a
的长度进行比较。由于您没有指定,我将假设该数组与CSV文件中的每一行都是一维的。
if (count($csv) > 0 && count($a) == count(explode(',', $csv[0]))) {
// Valid
} else {
// Not valid
}
答案 1 :(得分:2)
$b = @array_combine($a, $csv);
if (!$b) {
// error!
}
你不应该(ab)使用@
operator,但在这种情况下,它最符合你的要求。
答案 2 :(得分:1)
根据docs,如果任一数组为空或者长度不同,则array_combine将返回false。
所以你应该能够做到这样的事情:
if($b = array_combine($a, $csv)) {
} else {
... the warning occurred ...
}