Покинул форум
Сообщений всего: 10
Дата рег-ции: Нояб. 2014
Помог: 0 раз(а)
Уважаемые гуру, стоит нетривиальная задача:
допустим есть массив из 30 позиций, и при различных входящих параметрах, из него должна производиться выборка последовательных 7 позиций. Проблема начинается тогда, когда первая позиция допустим должна браться из ключа 28, т.е. выбраться должны ключи:
28, 29, 30, 0, 1, 2, 3
Подскажите как это решить красиво, без километра кода? Спасибо (Добавление)
Протупил. Решил сам:
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
А что если цифры на которые Вы ориентируетесь будут превышать количество элементов в массиве? array_merge снова и снова? Или это исключено для данной задачи?
Напишу на всякий случай решение с помощью итераторов.
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
RobinBad
Не за что. Если и число 7 фиксировано, тогда Ваш вариант пойдет)
DelphinPRO
А элемент с индексом 0 куда то потерялся
Интересно, как поступишь, если массив будет ассоциативным?)
Или например если будет $start = 153; $count = 267; а сам массив будет содержать 30 элементов?
Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011
Помог: 7 раз(а)
RobinBad пишет:
Уважаемые гуру, стоит нетривиальная задача:
допустим есть массив из 30 позиций, и при различных входящих параметрах, из него должна производиться выборка последовательных 7 позиций. Проблема начинается тогда, когда первая позиция допустим должна браться из ключа 28, т.е. выбраться должны ключи:
28, 29, 30, 0, 1, 2, 3
Подскажите как это решить красиво, без километра кода? Спасибо
Кидаешь в функцию get() массив, ключ, с которого начинать выборку, и количество требуемых элементов. Причем массив может быть и ассоциативным, а ключ, соответственно, строкой. Вернет массив с элементами, начиная с ключа, длиной в количество требуемых элементов. В том числе дополнит его элементами из начала. В том числе если количество требуемых элементов больше, чем длина массива, то не будет повторять значения. (Добавление)
Подправил чуть, чтобы исходные ключи сохранялись.
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
RobinBad пишет:
Спасибо, но тесты показали что Ваш код не дружит с нулем
teddy пишет:
А элемент с индексом 0 куда то потерялся
Ну вы прямо как дети исправьте 11 строку
$index = $index - $length - 1; и ноль будет на месте.
teddy пишет:
Интересно, как поступишь, если массив будет ассоциативным?)
Это нет в начальном ТЗ.
teddy пишет:
Или например если будет $start = 153; $count = 267; а сам массив будет содержать 30 элементов?
Добавлю проверку на допустимость значений входных данных.
----- Чем больше узнаю, тем больше я не знаю.
teddy
Отправлено: 04 Ноября, 2014 - 17:48:47
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
DelphinPRO
Насчет нулевого индекса я конечно загнул, согласен)
Но тем не менее, в первом посте этого топика лежит более гибкое решение, а главное там всего 1 строчка...
Я конечно не против иных вариантов, наверное меня просто никто не читает)
Ну да ладно... )
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.