Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Остаток от деления для циклических переходов
 
 автор: p.pavluxa   (08.08.2012 в 19:13)   письмо автору
 
 

Здравствуйте, уважаемые пользователи форума! Помогите пожалуйста реализовать мою идею. У меня имеется одномерный массив такого вида:

$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: извиняюсь если не совсем логично выразил свою идею.

  Ответить  
 
 автор: confirm   (08.08.2012 в 19:33)   письмо автору
 
   для: p.pavluxa   (08.08.2012 в 19:13)
 

Дополнительный вопрос - запросы к массиву по указателю происходят за один сеанс (однократное выполнение скрипта) или нет?

  Ответить  
 
 автор: p.pavluxa   (08.08.2012 в 19:51)   письмо автору
 
   для: 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.

  Ответить  
 
 автор: confirm   (08.08.2012 в 20:00)   письмо автору
 
   для: p.pavluxa   (08.08.2012 в 19:51)
 

И зачем тогда такие сложности? Есть ведь current(), next() и prev().

  Ответить  
 
 автор: p.pavluxa   (08.08.2012 в 20:05)   письмо автору
 
   для: 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 )];


А как этим же методом бороться за выход из массива слева?

  Ответить  
 
 автор: confirm   (08.08.2012 в 20:45)   письмо автору
 
   для: 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)-$aUsers[$k+1] : $aUsers[0]);

  Ответить  
 
 автор: p.pavluxa   (08.08.2012 в 20:50)   письмо автору
 
   для: confirm   (08.08.2012 в 20:45)
 

Спасибо, это практически то что я хотел.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования