你错过了break;在for loop!
是的,它可能是编码问题,因为函数strcasecmp()仅适用于Unicode。多字节字符(如UTF-8或UTF-16)不能与strcasecmp()进行比较。
此外,strcasecmp()是因此使用strtolower()针对它的参数不改变函数的结果(字符串“示例”同“实施例” M“示例”,“示例”等)不区分大小写的功能。
您应该设置默认结果值(如$res=false;
)以确保结果在循环之后设置。
你应该foreach loop取代for loop块像这样的吼叫
$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;
但是,为了使这个解决方案很容易,只要你有$parameters
串像"console=1|userid=8159"
,并且希望您可以使用此功能
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;
}
所以找到值$key
字符串"userid"
,把它放到这个函数中,它会返回你的结果或者fal se if $key
未在$parameters
列表中找到。
例
$parameters = "console=1|userid=8159";
$name = "userid";
echo getParamValue($parameters, $name);
输出
8159
现在你可以写你的代码,这样
$parameters = explode('|', $_COOKIE[Cisco_Rewards::REWARDS_SETTINGS_COOKIE_NAME]);
$value = getParamValue($parameters, $name);
而且$值需要你的结果,或者返回假如果$ name不在$参数列表中。
第一行之后的'$ parameters'是否包含期望值?你可以发布var_dump($ parameters)的结果还是仅仅是一个例子? – Wh1T3h4Ck5 2011-04-17 00:00:08
那个'return'代表什么? – Wh1T3h4Ck5 2011-04-17 00:08:46
由print_r($ parameters)返回数组([0] => console = 1 [1] => userid = 8150),如果通过$请求了返回值,则返回键的值,如8150名称。 – 2011-04-17 01:24:14