Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Предыдущий и следующий элемент массива 
:(
    Опции темы
serezhka1986
Дата 24.7.2012, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 215
Регистрация: 12.6.2009

Репутация: 1
Всего: 0



Добрый день!
Прошу помощи... Как получить следующий и предыдущий элемент многомерного массива? Пробовал с помощью next() и prev(), но следующий массив берется от первого элемента. Пример:
Есть такой массив
Код

$myArray = Array
(
    ["18.06.2012"] => Array
        (
            ["CODE"] => 778
            ["ID"] => 9998
        )

    ["19.06.2012"] => Array
        (
            ["CODE"] => 90
            ["ID"] => 1255
        )

    ["20.06.2012"] => Array
        (
            ["CODE"] => 78
            ["ID"] => 2544
        )

    ["21.06.2012"] => Array
        (
            ["CODE"] => 987
            ["ID"] => 6665
        )
);

Если я пишу
Код

$nextarray = next($myArray);

То получаю такой массив:
Код

Array
        (
            ["CODE"] => 90
            ["ID"] => 1255
        )

То есть следующий после первого. А как мне получить следующий от, например, третьего элемента. Я точно знаю интересующую меня дату (ключ массива), но мне надо получить предыдущий и следующий элемент после него.  smile 
--------------------
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть жопой на клавиатуру... 
PM   Вверх
skyboy
Дата 24.7.2012, 21:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



редко с подобным сталкивался, потому предложу "поверхностное" решение.
выделить с помощью array_keys ключи отдельно.
найти позицию(числовую) в этом массиве нужного тебе ключа.
сделать ±1 и получить соседей
PM MAIL   Вверх
Sentox
Дата 24.7.2012, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: 7
Всего: 7



Здесь как нельзя кстати использовать Iterator
Реализовать метод перемотки можно в нём как раз и после этого получать соседей.

Это сообщение отредактировал(а) Sentox - 24.7.2012, 22:56
PM MAIL   Вверх
bars80080
Дата 25.7.2012, 07:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



такие темы обычно решаю на стадии сбора данных. к примеру, выборка пользователей завершается массивом, где ключами служат их id. если же надо будет ещё и сделать перечень по принципу "следующий", то дополнительно сделаю массив с порядковыми ключами, а значениями будут эти id
PM MAIL WWW   Вверх
Sanchezzz
Дата 25.7.2012, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



 грубый способ но работает))) 
Код

    $array = Array
(
    "18.06.2012" => Array
        (
            "CODE" => 778,
            "ID" => 9998,
        ),
    "19.06.2012" => Array
        (
            "CODE" => 90,
            "ID" => 1255,
        ),
    "20.06.2012" => Array
        (
            "CODE" => 78,
            "ID" => 2544,
        ),
    "21.06.2012" => Array
        (
            "CODE" => 987,
            "ID" => 6665,
        )
);

function getPrevArr($array , $key){
    $keys = array_keys($array);
    return $array[$keys[array_search($key, $keys)-1]];    
}

function getNextArr($array , $key){
    $keys = array_keys($array);
    return $array[$keys[array_search($key, $keys)+1]];    
}

print_R(getPrevArr( $array, "19.06.2012" )  );    
print_R(getNextArr( $array, "19.06.2012" )  );    



--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
serezhka1986
Дата 25.7.2012, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 215
Регистрация: 12.6.2009

Репутация: 1
Всего: 0



Цитата(Sanchezzz @  25.7.2012,  09:32 Найти цитируемый пост)
грубый способ но работает))) 

Да... Действительно грубоватый способ  smile 
Но так ведь работает быстрее чем перебором массива через foreach? Или я ошибаюсь?

Это сообщение отредактировал(а) serezhka1986 - 25.7.2012, 09:55
--------------------
Для некоторых лучший способ написать что-нибудь осмысленное - это сесть жопой на клавиатуру... 
PM   Вверх
baldina
Дата 25.7.2012, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



Код

$it = new ArrayIterator($array);

$pos = 2;
$it->seek ($pos);
$cur = $it->current();

$it->seek ($pos-1);
$prev = $it->current();

$it->seek ($pos+1);
$next = $it->current();


Добавлено через 3 минуты и 53 секунды
если известен ключ, то, как сказал skyboy, нужно сначала получить позицию по ключу:
Код

$keys = array_keys ($myArray); // pos=>key
$keys = array_flip ($keys); // key=>pos
$pos = $keys[$key];
...


Добавлено через 7 минут и 23 секунды
http://codepad.org/wvlunllF
PM MAIL   Вверх
Valinur
Дата 29.7.2012, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 21.9.2007
Где: Москва

Репутация: 4
Всего: 6



http://stackoverflow.com/a/795636

Но решение подойдет только к небольшим массивам
--------------------
Не бойтесь совершенства, Вы все равно его не достигнете (с) ...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0812 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.