Il vous manque break; dans for loop!
Oui, il peut s'agir d'un problème de codage car la fonction strcasecmp() fonctionne uniquement avec Unicode. Les caractères multi-octets tels que UTF-8 ou UTF-16 ne peuvent pas être comparés avec strcasecmp().
En outre, strcasecmp() est fonction insensible à la casse si l'aide strtolower() contre ses paramètres ne change pas de résultat fonction (chaîne « l'exemple » est identique à « Exemple » m « par exemple », « EXAMPLE », etc.).
Vous devez définir la valeur de résultat par défaut (par exemple $res=false;
) pour vous assurer que le résultat est défini après la boucle.
Vous devez remplacer for loop bloc avec foreach loop comme celui-ci beugler
$parameters = explode('|', $_COOKIE[Cisco_Rewards::REWARDS_SETTINGS_COOKIE_NAME]);
// this will handle result
$res = false;
foreach ($parameters as $value) {
$param = explode('=', $value);
if(count($parameter) > 1) {
// I guess this line is just for testing result
echo "param1=".trim($param[0])."; param2=".trim($name)."; Result=".strcasecmp(trim($param[0]), trim($name)) . "<br />\n";
if(strcasecmp(trim($param[0]), trim($name))) {
$res=$param[1];
// you should break here
break;
}
}
}
// try to output result before (testing purpose only)
var_dump($res);
return $res;
Mais pour rendre cette solution facile, vous pouvez utiliser cette fonction
function getParamValue($parameters, $key) {
$res = false;
$plist = explode('|', $parameters);
foreach ($plist as $pair) {
$element = explode('=', $pair);
if (trim($element[0]) == trim($key)) {
$res = trim($element[1]);
break;
}
}
return $res;
}
Donc, si vous avez $parameters
chaîne comme "console=1|userid=8159"
et que vous voulez pour trouver la valeur $key
chaîne "userid"
, mettez-la dans cette fonction et il renverra votre résultat ou fal se si $key
n'a pas été trouvé dans la liste $parameters
.
Exemple
$parameters = "console=1|userid=8159";
$name = "userid";
echo getParamValue($parameters, $name);
Sortie
8159
Maintenant, vous pouvez écrire votre code de cette façon
$parameters = explode('|', $_COOKIE[Cisco_Rewards::REWARDS_SETTINGS_COOKIE_NAME]);
$value = getParamValue($parameters, $name);
Et valeur $ prend votre résultat ou retourne faux si $ name n'est pas dans $ paramètres liste.
Est-ce que '$ parameters' après la première ligne contient la valeur attendue? Pouvez-vous publier le résultat de var_dump ($ parameters) ou juste un exemple? – Wh1T3h4Ck5
Qu'est-ce que «retour» signifie? – Wh1T3h4Ck5
Array ([0] => console = 1 [1] => userid = 8150) est retourné par print_r ($ paramètres), et le retour, retourne la valeur de la clé, disons 8150 pour userid si cela est demandé via $ prénom. –