У меня есть список элементов в определенном порядке, поэтому я решил сохранить их в массиве
$items = array(
"apple",
"banana",
"pear"
);
Если программа вызывается с параметром «банан», мне нужно сказать, что «яблоко» идет раньше, а «груша» - после. В настоящее время я делаю что-то вроде этого:
foreach($items as $k=>$v) { if ($v == "banana") { $current_key = $k }
Так что теперь я знаю, что $ current_key -1 - предыдущий, а +1 - следующий. Это работает, просто кажется уродливым перебирать весь массив. Есть ли лучший способ сделать это?
UPDATE
На случай, если кому-то все равно, я решил сделать несколько быстрых тестов, чтобы увидеть, насколько быстрыми были способы получения информации. Более 1000 итераций в массиве из 6000 элементов с микротайм-повтором:
Мой опубликованный путь: 4,567
Array_Search: 2.749
Пока я думал, я также попробовал подход, который сохранял данные в массиве массивов, таких как:
$items['banana']['next'] = 'pear';
$items['banana']['prev'] = 'apple';
, который был, конечно, победителем по милям (0,0005). Ничто из этого не имеет отношения к делу, мне просто было любопытно, и я поделился с кем-нибудь, кто это читает.