PHP字符串比较不起作用

时间:2011-04-16 23:52:36

标签: php cookies string-comparison

我遇到了PHP字符串比较的问题。它永远不会变成0.下面我试图在cookie中设置一个设置并将其与给定的密钥进行比较,并返回该cookie的值。 cookie看起来像这个console = 1 | userId = 5。该值始终为-180或其他值。我回应它们并且它们是相同的,并且长度是相同的。这可能是编码问题吗?

$parameters = explode('|', $_COOKIE[Cisco_Rewards::REWARDS_SETTINGS_COOKIE_NAME]);

            for ($i = 0; $i < count($parameters); $i++) {
                $parameter = explode('=', $parameters[$i]);

                if(count($parameter) > 1) {
                    echo strcasecmp(strtolower(trim($parameter[0])), trim(strtolower($name)));
                    if(strcasecmp(strtolower(trim($parameter[0])), trim(strtolower($name))) == 0) {
                        return $parameter[1];
                    }
                }
            }

1 个答案:

答案 0 :(得分:1)

你在for loop中错过 break;

是的,它可能是编码问题,因为函数strcasecmp()仅适用于Unicode。 UTF-8或UTF-16等多字节字符无法与strcasecmp()进行比较。

此外,strcasecmp()是不区分大小写的函数,因此对其参数使用strtolower()不会更改函数的结果(字符串“example”与“EXAMPLE”m“eXaMPlE”,“ExamPlE”相同等等。)

您应该设置默认结果值(如$res=false;)以确保在循环后设置结果。

您应该将for loop块替换为foreach 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;

但是为了使这个解决方案更容易,你可以使用这个功能

  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;
    }

因此,如果您有$parameters字符串"console=1|userid=8159"并希望找到$key字符串"userid"的值,请将其放入此函数中,它将返回您的结果或<如果$key列表中未找到$parameters,则为strong> false 。

实施例

  $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 列表中, $ value 会获取结果或返回 false

相关问题