PHP Variable/Array 值)定期小写

PHP Variable/Array Value(s) Lower Cased Periodically

我目前遇到一个问题,即变量或数组值中的随机字符串会定期小写。

这是我看到的数组示例:

 $modules = array("Dashboard", "Calendar", "Maintenance", "Service Orders", "Quotes", "Contacts");

var_dump($modules);

输出:


    array(6) {
      [0]=>
      string(9) "Dashboard"
      [1]=>
      string(8) "Calendar"
      [2]=>
      string(11) "maintenance"
      [3]=>
      string(14) "Service Orders"
      [4]=>
      string(6) "Quotes"
      [5]=>
      string(8) "Contacts"
    }

我正在做一个 in_array() 条件,但它没有找到 "Maintenance",因为它是 "maintenance"。

编辑

这是一个示例,说明通过尝试获取 $_REQUEST var 中的索引的方法传递字符串时发生的情况:

class RequestHandle {

    /**
     * Get the parameter index of the request var
     * @param $index
     * @return string|array
     */
    public static function getParameter($index){
        $value = "";
        $data  = $_REQUEST;

        if(isset($data[$index]) && !is_array($data[$index])) {
            $value = trim($data[$index]);
        } else if(isset($data[$index]) && is_array($data[$index])) {
            foreach($data[$index] as $key => $value){
                $data[$index][$key] = $value;
            }

            $value = $data[$index];
        }

        return $value;
    }
}

$costs = RequestHandle::getParameter("SubLaborCosts");

输出:

    string(0) ""

请求变量已设置并带有数据。当我在 getParameter 方法中打印 $index 时,它有时会显示 "sublaborcosts",并且由于 "SubLaborCosts" =/= "sublaborcosts" 而找不到索引。为了让我正确地抓取数据而不遗漏任何东西,我不得不修改方法以包括:

$data  = array_change_key_case($_REQUEST);
$index = strtolower($index);

即使是偶尔,80% 的时间它准确显示我设置的内容也是正确的。

我以前从未见过这种情况,这里列出了我认为可能会产生影响的新事物……只是找不到解决方案。

  1. UTF-8 字符集
  2. PHP 5.5
  3. 国际扩展
  4. Windows 服务器 2012

任何帮助或想法将不胜感激!

关于不区分大小写in_array():

您可以使用preg_grep()(正则表达式):

preg_grep( "/Maintenance/i" , $array );

模式末尾的i表示'case insensitive'。


@fusion3k 的答案解决了这个问题,但我也会把这个也扔进去。

function in_array_case_insensitive($needle, $haystack) 
{
    return in_array( strtolower($needle), array_map('strtolower', $haystack) );
}

顺便说一句:你的问题很奇怪,我以前从未见过这种情况!

所以我能够通过将 PHP 从 5.5.32 更新到 5.6.18 并使用 icuxx56 而不是 icuxx51 作为 intl 扩展名来更正和稳定。我不知道 icuxx51 是否存在已知问题,但这将是 PHP 开发人员需要关注的问题。感谢您尝试帮助大家。