|
|
|
| Здравствуйте, уважаемые пользователи форума! Помогите пожалуйста реализовать мою идею. У меня имеется одномерный массив такого вида:
$aMyArray = array( 1, 2, 3, 4, 5, 6 );
$iCurrent = 0;
|
Переменная $iCurrent хранит текущую позицию указателя в этом массиве, значение которого мы хотим получить. Например мне нужно получить следующий элемент после $iCurrent, для этого я пишу $aMyArray[($iCurrency + 1) % n], где n - размер массива. В таком случае когда я буду находится на 6 элементе и я захочу получить следующий элемент у меня перебор начнётся с начала массива.
А вот как мне сделать что бы получать предыдущий элемент? то есть $iCurrent - 1. Что бы срабатывало как будто там стоит условие вида ($iCurrent < 1 ? n - 1 : $iCurrent - 1).
Реализовать это при помощи этого же оператора, либо функции intval. Помогите пожалуйста.
PS: извиняюсь если не совсем логично выразил свою идею. | |
|
|
|
|
|
|
|
для: p.pavluxa
(08.08.2012 в 19:13)
| | Дополнительный вопрос - запросы к массиву по указателю происходят за один сеанс (однократное выполнение скрипта) или нет? | |
|
|
|
|
|
|
|
для: confirm
(08.08.2012 в 19:33)
| | Однократное, но это не имеет значение.
Мне нужно просто заменить выражение $iCurrent < 1 ? count( $aMyArray) - 1 : $iCurrency - 1 в строке $aMyArray[$iCurrent < 1 ? count( $aMyArray) - 1 : $iCurrency - 1] , что бы без этого выражения при $iCurrent равной 0 индексом являлся размер массива - 1, а как-то через оператор % либо intval. | |
|
|
|
|
|
|
|
для: p.pavluxa
(08.08.2012 в 19:51)
| | И зачем тогда такие сложности? Есть ведь current(), next() и prev(). | |
|
|
|
|
|
|
|
для: confirm
(08.08.2012 в 20:00)
| |
$aUsers = array( 'user1', 'user2', 'user3', 'user4', 'user5' );
$iMyNumber = 4;
echo 'Ваш ник: '.$aUsers[$iMyNumber];
echo 'Ник соседа слева: '.$aUsers[$iMyNumber-1]; // если $iMyNumber == 0, то тут ошибка
echo 'Ник соседа справа: '.$aUsers[$iMyNumber+1]; // пахать не будет так как вышли за предел массива
|
что бы бороться с соседом справа использую такое:
echo 'Ник соседа справа: '.$aUsers[($iMyNumber+1) % count( $aUsers )];
|
А как этим же методом бороться за выход из массива слева? | |
|
|
|
|
|
|
|
для: p.pavluxa
(08.08.2012 в 20:05)
| |
<?
$aUsers = array( 'user1', 'user2', 'user3', 'user4', 'user5' );
$usr = 'user1';
$k = array_search($usr, $aUsers);
echo 'left - '.($k ? $aUsers[$k-1] : end($aUsers)).
', user - '.$usr.', right - '
.($k<count($aUsers)-1 ? $aUsers[$k+1] : $aUsers[0]);
|
| |
|
|
|
|
|
|
|
для: confirm
(08.08.2012 в 20:45)
| | Спасибо, это практически то что я хотел. | |
|
|
|