61
задан 30 July 2013 в 12:17

2 ответа

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

Мое решение состояло в том, чтобы создать $CaseMap отдельного массива для отображения данного строчного ключа к mixedcase ключу, используемому в массиве (несоответствующий код опущен здесь):

$CaseMap=[];
foreach ($UserArray as $Key=>$Value)
    $CaseMap[strtolower($Key)]=$Key;

Затем поиск похож на это:

$Value=$UserArray[$CaseMap("key")];

и память наверху просто массив $CaseMap, который отображает, по-видимому, короткие ключи к коротким ключам.

я не уверен, имеет ли PHP более эффективный способ генерировать $CaseMap в случае где I'n, не уже использующий foreach.

0
ответ дан 31 October 2019 в 15:17

У меня просто была та же проблема, и я не мог изменить исходный массив. Я использую немного функций массива для него.

Параметры

$search = "AbCd";
$array = array("AbcD"=>"11","Bb"=>"22");

Решение

$lower_search = strtolower($search);
$array_of_keys = array_map("strtolower",array_keys($array));
$idx = array_search($lower_search,$array_of_keys);
if($idx !== FALSE)
    echo array_values($array)[$idx];

Делают его короче

if(($idx=array_search(strtolower($search),array_map("strtolower",array_keys($array))))!==FALSE)
    echo array_values($array)[$idx];
0
ответ дан 31 October 2019 в 15:17

Другие вопросы по тегам:

Похожие вопросы: