froops
@froops

Как при достижении конца массива продолжить его обходить сначала?

Всем привет!
Есть такой массив:
$arrya = array(
    	array(),
	array(),
    	array(),
    	array(),
	// ещё сколько-то раз это же
  	array(),
);

Необходимо сделать так, чтобы каждый день выводилось по 5 элементов массива по порядку, причем, если элементов в массиве не хватает на весь месяц, то выводить элементы снова по порядку с нуля.

Пример: В массиве 75 элементов, а месяц состоит из 30 дней, то
- в первый день выведутся элементы массива с 0 по 4 ключ
- во второй день выведутся элементы с 5 по 9 ключ
- в третий день с 10 по 14 ключ

Но на 30 дней не хватит 75 элементов, т.к в день необходимо выводить по 5 элементов, а в месяце то у нас 30 дней (см выше условие). Поэтому нужно снова прогонять с начала:
- в 14 день выпадут 70-74 элементы
- в 15 день выпадут 75-79 элементы

Соотвественно, учитывая, что в массиве 75 элементов, то на 15, 16 и остальные дни у нас не хватит элементов. Поэтому они должны снова идти по кругу с нуля. Т.е вот так (весь цикл пошел заново):

- В 15 день: 75, 0, 1, 3, 4
- В 16 день: 5-9
- В 17 день: 10-14
- в 18 день: 15-19

Помогите, пожалуйста, я уже третий день не могу решить эту задачу :(
// Число элементов в массиве
$count_array = count($array);

// Выводить элементов на страницу
$count_str = 5;

if($count_array > 0) {
	
	$html = '';
	
	// Текущий день месяца числом
	$j = date('j');
	
	// Конечная позиция
	$end_key = $j * $count_str;
	
	// Начальная позиция
	$start_key = $end_key - $count_str;
	
	for($i = $start_key; $i < $end_key; $i++) {
	
		if(array_key_exists($i, $array)) {
			$value = $array[$i];
			$html .= $i.' => TRUE <br/>';
		}
		else {
			$html .= $i.' => FALSE <br/>';
		}
	}
	
	echo $html;
}
  • Вопрос задан
  • 886 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Твоя проблема в том, что у тебя смещение ни к чему не привязано. учитывая, что в начале каждого месяца оно будет разное - неудивительно, что ты запутался.

Я бы на твоем месте посмотрел на функцию GregorianToJD()
Захардкодил бы в скрипте возвращаемое ей значение в день начала показов
А потом из разницы с текущим значением вычислял смещение.
Оператор % тебе в этом мог бы пригодиться.
Ну и array_slice добавить, для красоты
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы