Для сайта, над которым я работаю, я использую библиотеку, чтобы получить список состояний.Он возвращает численно индексированный массив состояний, каждый из которых имеет три ключа: stateCode, stateName и stateSeg.Это выглядит так:
array
0 => &
array
'stateCode' => string 'AL' (length=2)
'stateName' => string 'Alabama' (length=7)
'stateSeg' => string 'alabama-al' (length=10)
1 => &
array
'stateCode' => string 'AK' (length=2)
'stateName' => string 'Alaska' (length=6)
'stateSeg' => string 'alaska-ak' (length=9)
2 => &
array
'stateCode' => string 'AZ' (length=2)
'stateName' => string 'Arizona' (length=7)
'stateSeg' => string 'arizona-az' (length=10)
Я часто нахожу себя с одним из трех значений, и мне нужно найти его соответствующее значение.Для этого мне постоянно приходится перебирать массив состояний, чтобы найти нужные мне данные.Вот так:
foreach ($this->data['stateList'] as $state)
{
if ($state['stateCode'] == $searchParams['state'])
{
$stateSeg = $state['stateSeg'];
break;
}
}
$url = BASEURL . '/' . $stateSeg . ".html";
Мне это кажется неэффективным.Я думаю, что наиболее эффективное решение, которое я смог придумать, состоит в том, чтобы превратить состояния в объекты и поместить их в массив с несколькими ключами для stateCode, stateSeg и stateName, каждый из которых указывает на один и тот же объект состояния, поэтому на них можно ссылаться какэто:
stateList[‘CA’]->getStateSeg();
или
stateList[‘Arizona’]->getStateCode();
или
stateList[‘alaska-ak’]->getStateName();
и т. д.
Это также похоже на взлом, который может привести кв довольно большом массиве (150 ключей, указывающих на 50 объектов) с реплицированными данными (ключи, реплицирующие данные, хранящиеся в объектах).
Во всяком случае, подумал, что увижу, есть ли какая-то модель для такого типа проблемы.Этот массив состояний - не единственное, с чем я столкнулся, когда мне приходилось выполнять такой итеративный поиск в многомерных массивах, чтобы найти соответствующие значения.
Вопрос помечен PHP и приведенный выше кодв PHP, но меня интересуют элегантные решения на любом языке .