捕获数组组合警告并打印自己的错误消息


Catch array combine warning and print own error message?

我读取了一些csv文件,并使用array_combine将内容映射到字段名称:

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

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

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

我尝试使用尝试和捕获,但这不起作用。请注意,我正在使用 zend 框架。

任何想法如何捕捉警告?

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

if (count($csv) > 0 && count($a) == count(explode(',', $csv[0]))) {
    // Valid
} else {
    // Not valid
}
$b = @array_combine($a, $csv);
if (!$b) {
    // error!
}

不应该 (ab) 使用 @ 运算符,但在这种情况下,它最能满足您的需求。

根据文档,如果任何一个数组为空或它们的长度不同,array_combine将返回 false。

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

if($b = array_combine($a, $csv)) {
} else {
   ... the warning occurred ...
}