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>).