В настоящее время у меня проблема со случайными строками в переменных или значениях массива, которые периодически обрабатываются в нижнем регистре.
Вот пример того, что я вижу с массивом:
$modules = array("Dashboard", "Calendar", "Maintenance", "Service Orders", "Quotes", "Contacts");
var_dump($modules);
Выход:
массив (6) { [0] => string (9) "Панель инструментов" [1] => string (8) "Календарь" [2] => строка (11) "обслуживание" [3] => string (14) "Сервисные заказы" [4] => string (6) "Цитаты" [5] => строка (8) "Контакты"}
Я делаю in_array()
состояние, но оно не находит «Техническое обслуживание», потому что это «техническое обслуживание».
РЕДАКТИРОВАТЬ
Вот пример того, что происходит с передачей строки через метод, который пытается получить индекс в $_REQUEST
вар:
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");
Выход:
строка (0) ""
Запрос var задается и с данными. Когда я делаю печать $index
в getParameter
Этот метод иногда отображает «sublaborcosts» и не находит индекс, поскольку «SubLaborCosts» = / = «sublaborcosts». Чтобы я мог правильно получать данные, не пропуская ничего, мне пришлось изменить метод, включив в него:
$data = array_change_key_case($_REQUEST);
$index = strtolower($index);
И даже в 80% случаев правильно показывать, что я установил.
Я никогда не видел этого раньше, и вот список элементов, которые являются новыми для этого события, которые, я думаю, могут оказать влияние … просто не могу найти решение.
Любая помощь или идеи будут с благодарностью!
Ответ @ fusion3k решает проблему, но я ее тоже добавлю.
function in_array_case_insensitive($needle, $haystack)
{
return in_array( strtolower($needle), array_map('strtolower', $haystack) );
}
Как в стороне: ваша проблема странная, я никогда не видел, чтобы это случилось раньше!
Ты можешь использовать preg_grep()
(регулярное выражение):
preg_grep( "/Maintenance/i" , $array );
i
в конце шаблона означает «без учета регистра».
Так что я смог исправить это и исправить его, обновив PHP с 5.5.32 до 5.6.18 и используя icuxx56 вместо icuxx51 для расширения intl. Я не знаю, существует ли известная проблема с icuxx51, но разработчикам PHP стоит на это посмотреть. Спасибо за попытку помочь парням.