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% 的时间它准确显示我设置的内容也是正确的。
我以前从未见过这种情况,这里列出了我认为可能会产生影响的新事物……只是找不到解决方案。
- UTF-8 字符集
- PHP 5.5
- 国际扩展
- Windows 服务器 2012
任何帮助或想法将不胜感激!
关于不区分大小写in_array():
您可以使用preg_grep()
(正则表达式):
preg_grep( "/Maintenance/i" , $array );
模式末尾的i
表示'case insensitive'。
- 阅读更多关于 preg_grep() function
- 阅读更多关于 Regular expressions syntax
@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 开发人员需要关注的问题。感谢您尝试帮助大家。
我目前遇到一个问题,即变量或数组值中的随机字符串会定期小写。
这是我看到的数组示例:
$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% 的时间它准确显示我设置的内容也是正确的。
我以前从未见过这种情况,这里列出了我认为可能会产生影响的新事物……只是找不到解决方案。
- UTF-8 字符集
- PHP 5.5
- 国际扩展
- Windows 服务器 2012
任何帮助或想法将不胜感激!
关于不区分大小写in_array():
您可以使用preg_grep()
(正则表达式):
preg_grep( "/Maintenance/i" , $array );
模式末尾的i
表示'case insensitive'。
- 阅读更多关于 preg_grep() function
- 阅读更多关于 Regular expressions syntax
@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 开发人员需要关注的问题。感谢您尝试帮助大家。