这个完全超出我的范围。我想比较两个字符串。当我回显它们时,它们似乎是相同的,但当我将它们与'=='运算符进行比较时,它返回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++;
}
}
答案 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()以查看是否还有其他任何内容传递。