循环通过不起作用的信件

时间:2013-08-23 18:09:49

标签: php string for-loop

我有一个函数,它遍历excel列。它昨天工作,但现在我遇到了问题。我的函数根据我的false返回var_dump()它甚至没有进入for循环(我在该循环中回显了“here”并且没有回显)。为什么不起作用?

$max_col会返回正确的最大列

function get_col(PHPExcel $excel, $search, $row = 5, $col = "A"){
    $max_col = (string)$excel->getActiveSheet()->getHighestColumn(); // returns BH
    for($i = (string)$col; $i <= $max_col; $i++){
        $val    = trim($excel->getActiveSheet()->getCell("{$i}{$row}")->getValue());
        $search = preg_quote($search);
        if(preg_match("/$search/isU", $val)){
            return "$i";
        }
    }
    return false;
}

以下是我调用函数的方法:

$col = get_col($excel, $sku, 5, "Q");
var_dump($col);

1 个答案:

答案 0 :(得分:2)

对字符串使用<=比较会导致问题,因为它是字母比较,按字母顺序“C”&gt; “BH” 将$ max_col的初始值调整为超出您要检查的最大值的一列,然后使用!==比较

function get_col(PHPExcel $excel, $search, $row = 5, $col = "A"){
    $max_col = $excel->getActiveSheet()->getHighestColumn(); // returns BH
    $max_col++;
    for($i = $col; $i !== $max_col; $i++){
        $val    = trim($excel->getActiveSheet()->getCell("{$i}{$row}")->getValue());
        $search = preg_quote($search);
        if(preg_match("/$search/isU", $val)){
            return "$i";
        }
    }
    return false;
}