Как получить индекс для ключа, который я знаю, чтобы быть уникальным в массиве - PullRequest
1 голос
/ 04 января 2010

У меня есть список элементов в определенном порядке, поэтому я решил сохранить их в массиве

$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). Ничто из этого не имеет отношения к делу, мне просто было любопытно, и я поделился с кем-нибудь, кто это читает.

Ответы [ 3 ]

5 голосов
/ 04 января 2010

array_search () должен спасти вас цикл.

1 голос
/ 04 января 2010

Вы ищете функцию array_search: http://www.php.net/manual/en/function.array-search.php.

$key = array_search('banana', $items);
0 голосов
/ 04 января 2010

http://www.php.net/manual/en/function.array-search.php

$current_key=array_search('banana',$items);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...