你錯過了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