比较两个相同的字符串在PHP中返回false

时间:2009-10-14 11:52:45

标签: php cakephp

这个完全超出我的范围。我想比较两个字符串。当我回显它们时,它们似乎是相同的,但当我将它们与'=='运算符进行比较时,它返回false。例如,在我的数据库上运行下面的代码时。它输出的东西像“显然苹果不等于苹果”。任何人都可以对此有所了解吗?

if ($this->data['list_text']) { //user has entered into textarea
            $list = nl2br($this->data['list_text']);

            $list_array = explode('<br />',$list);

            $ranking = 1;
            $company_array = $this->CompanyList->CompanyRanking->Company->find('list',null);

            //this is the comparison bit
            foreach ($list_array as $key => $value) {
                $companyId = null;
                foreach ($company_array as $key2 => $value2) {
                    if ($value2 != $value) {
                        echo 'APPARENTLY '.$value2.' does not equal '.$value;                           
                    } else {
                        $companyId = $key2;
                        break;
                    }
                }

                $this->data['CompanyRanking'][$ranking]['ranking'] = $ranking;
                $this->data['CompanyRanking'][$ranking]['company_id'] = $companyId;
                $ranking++;
            }
        }

5 个答案:

答案 0 :(得分:9)

尝试使用var_dump()而不是echo。

echo 'APPARENTLY '.$value2.' does not equal '.$value;   
echo '<pre>Debug: ';
echo 'value='; var_dump($value);
echo 'value2='; var_dump($value2);
echo '</pre>';

它提供了其他信息。例如。实际的类型。和字符串的长度。

答案 1 :(得分:3)

字符串是否有任何你没有看到的额外空格?尝试修剪它们。

答案 2 :(得分:3)

尝试检查两个字符串的编码比较。

也许它是utf8与iso-5589-1与一些奇怪的字符相比。

答案 3 :(得分:2)

我同意奥拉维尔的看法。我删除了trim并用preg_replace替换它,因为你假设$ value而$ value2是companyIDs。如果companyID应该是字母数字,包含连字符等,你可以快速修改这些...这个版本应该这样做:

if ($this->data['list_text']) { 
    $list = nl2br($this->data['list_text']);
    $list_array = explode('<br />', $list);

    $ranking = 1;
    $company_array = $this->CompanyList->CompanyRanking->Company->find('list',null);

    foreach ($list_array as $key => $value) {

        // remove any non digit characters
        $value = preg_replace('/[^0-9]/i','', $value); 
        $companyId = null;

        foreach ($company_array as $key2 => $value2) {

            // remove any non digit characters
            $value2 = preg_replace('/[^0-9]/i','', $value2); 

            if ($value2 != $value) {
                echo 'values not equal';                
            } else {
                $companyId = $key2;
                break;
            }
        }

        $this->data['CompanyRanking'][$ranking]['ranking'] = $ranking;
        $this->data['CompanyRanking'][$ranking]['company_id'] = $companyId;
        $ranking++;
    }
}

答案 4 :(得分:2)

尝试trim()获取任何空格以及var_dump()以查看是否还有其他任何内容传递。