windows — PHP переменная / значения массива (-ов) в нижнем регистре периодически

В настоящее время у меня проблема со случайными строками в переменных или значениях массива, которые периодически обрабатываются в нижнем регистре.

Вот пример того, что я вижу с массивом:

 $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% случаев правильно показывать, что я установил.

Я никогда не видел этого раньше, и вот список элементов, которые являются новыми для этого события, которые, я думаю, могут оказать влияние … просто не могу найти решение.

  1. Кодировка UTF-8
  2. PHP 5.5
  3. внутреннее расширение
  4. Windows Server 2012

Любая помощь или идеи будут с благодарностью!

0

Решение

Ответ @ fusion3k решает проблему, но я ее тоже добавлю.

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

Как в стороне: ваша проблема странная, я никогда не видел, чтобы это случилось раньше!

0

Другие решения

О регистронезависимом in_array ():

Ты можешь использовать preg_grep() (регулярное выражение):

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

i в конце шаблона означает «без учета регистра».


0

Так что я смог исправить это и исправить его, обновив PHP с 5.5.32 до 5.6.18 и используя icuxx56 вместо icuxx51 для расширения intl. Я не знаю, существует ли известная проблема с icuxx51, но разработчикам PHP стоит на это посмотреть. Спасибо за попытку помочь парням.

0
По вопросам рекламы [email protected]