Передвинуть указатель на определённый элемент массива [PHP]

LA
На сайте с 03.06.2008
Offline
105
5997

Или я что-то плохо маны читаю или глючит уже.

Вообщем, нужно передвинуть внутренний указатель на определённый элемент массива. Это нужно, чтоб узнать предыдущий и последующий элементы. Как реализовать?


// массив
$array = array(
'key_1' => array('array_key_1' => '3', 'array_key_2' => '4'),
'key_2' => array('array_key_1' => '41', 'array_key_2' => '23'),
'key_3' => array('array_key_1' => '32', 'array_key_2' => '43'),
'key_4' => array('array_key_1' => '12', 'array_key_2' => '12'),
);

$key = 'key_3';

// как получить последующий и предыдущий элементы массива, не используя (имею ввиду без цикла):
while (list($new_key, $val) = each($array)) {
if ($new_key == $key) {
break 1;
}
}

$last = prev($array);
next($array);
$next = next($array);

Буду признателен за помощь.

XL
На сайте с 16.01.2006
Offline
26
xAL
#1

если я правильно понял, то нужно примерно такой код:


$keys = array_keys($array); // делается один раз
$nextkey = $keys[array_search($key, $keys) + 1]; // оформляется в виде функции, если надо часто использовать
$nextval = $array[$nextkey]; // можно объединить с предыдущей строкой, если нужно только значение

Есть только одна проблема - РНР не гарантирует, что ключи в массиве отсортированы в том порядке, в котором они добавлены. Возможно, перед построением списка ключей (первая строка) понадобится еще сделать вот так:


ksort ($array);
Alek$
На сайте с 25.06.2008
Offline
34
#2

xAL, да нет, array_keys() возвращает ключи в том порядке, в котором они стоят в исходном массиве, так что приведеннйы код должен работать.

Google Cache Dumper & Bing Cache Dumper (/ru/forum/479980) RegSubmitter - Регистратор аккаунтов в социальных закладках (/ru/forum/300978) Мой блог (http://nevkontakte.org.ru).
D
На сайте с 21.06.2006
Offline
168
#3

Вариант xAL позволяет узнать элементы массива.

Но сам указатель перемещается только при вызове итераторов(цикл, next и т.д.)

Appstorespy - платформа анализа мобильных сторов | Publa.io - готовая инфраструктура для приема платежей и оплаты рекламных кабинетов в бурже
LA
На сайте с 03.06.2008
Offline
105
#4

xAL, большое спасибо. Как раз то, что искал.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий