2011-05-17 75 views
1

我读了一些csv文件并使用array_combine将内容映射到字段名称:Catch数组合警告并打印自己的错误信息?

$csv = array(); 
$a = array('some fields'); 
$b = array_combine($a, $csv); 

但是如果$ a中的字段名称与我在csv文件中指定的字段名称不同,则该方法将失败并显示警告

array_combine() [function.array-combine]:两个 参数应该具有相等数量的 元素

我尝试使用try和catch但这不起作用。作为一个说明,我正在使用zend框架。

任何想法如何捕捉警告?

回答

2

获取CSV中的列数,然后将其与$a的长度进行比较。既然你没有指定,我会假设该数组是一维的CSV文件中的每一行。

if (count($csv) > 0 && count($a) == count(explode(',', $csv[0]))) { 
    // Valid 
} else { 
    // Not valid 
} 
1

按照docs如果任一数组为空或者如果它们具有不同的长度,array_combine将返回false。

所以,你应该能够做这样的事情:

if($b = array_combine($a, $csv)) { 

} else { 
    ... the warning occurred ... 
} 
+1

是的,但我认为他试图防止警告被抛出。 – dtbarne 2011-05-17 06:32:41

2
$b = @array_combine($a, $csv); 
if (!$b) { 
    // error! 
} 

不应(AB)使用@ operator,但在这种情况下,它确实最字面上你想要什么。

+1

最简单的解决方案。唯一的问题是你不会知道它为什么不起作用。 – dtbarne 2011-05-17 06:34:10

+0

是的。 '!$ b'可能是因为数组为空或者因为它们的长度不同。如果你真的感兴趣,你可以做一个'if(count($ a)!= count($ csv))'来输出正确的错误信息。 – deceze 2011-05-17 06:36:13