J'essaie de comparer deux chaînes. Lorsque je les faisons écho, ils semblent être identiques, mais lorsque je les comparais à l'opérateur '==', il renvoie False. Par exemple, lors de l'exécution du code ci-dessous sur ma base de données. Il génère des choses comme "apparemment Apple ne correspond pas à une pomme". Quelle est la raison?
5 Réponses :
Les chaînes ont-elles des espaces supplémentaires que vous ne voyez pas? Essayez de les couper. P>
Dans une veine similaire, essayez d'utiliser echo 'apparemment>'. $ Value2. '<
Merci pour la suggestion. J'ai essayé d'ajouter "si (garniture ($ Value2)! = Garniture (valeur de $))" Et je suis toujours en train d'obtenir "Apparemment Apple ne correspond pas à la pomme".
Sur une autre note, mon code affiché ci-dessus serait plus rapide car vous n'effectuez pas la première garniture sur $ de valeur pour chaque itération de $ Company_array.
Il suffit de couper () ne suffit probablement pas parce qu'il ne fera que couper uniquement les espaces au début et à la fin des cordes.
Je suis d'accord avec Olafur. J'ai supprimé la garniture et l'a remplacée par un preg_replace en raison du fait que vous supposez $ la valeur et $ Value2 sont des compagnies de société. Vous pouvez modifier rapidement ces modifications si la société est censée être alphanumérique, contenant des traits d'union, etc ... cette version doit le faire:
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++;
}
}
Merci beaucoup CLBLOU. Il s'avère que la garniture fonctionnait, mais votre code était beaucoup plus efficace que le mien.
try var_dump () au lieu d'echo.
echo 'APPARENTLY '.$value2.' does not equal '.$value; echo '<pre>Debug: '; echo 'value='; var_dump($value); echo 'value2='; var_dump($value2); echo '</pre>';
Surtout utile lorsque vous utilisez Var_Dump consiste à vous assurer que vous avez installé Xdebug, car il sera jadis up de la sortie (les choses peuvent être difficiles à lire avec l'écho traditionnel ou, interdire, print_r).
Essayez Garni () pour n'importe quel espace blanc ainsi que Var_Dump () pour voir si quelque chose d'autre est passé avec elle. p>
Essayez de vérifier le codage des deux cordes comparées. P>
Peut-être que c'est utf-8 par rapport à ISO 8859-1 avec des personnages étranges. P>
Un canonique est comparaison de chaînes en utilisant '==' vs. strcmp () ' i> (les réponses couvrez également
=== code>).