У меня есть серия ключей объектов:
$this->rules->days->mon = isset($this->recurring_event_data['post_ar'][$this->rules->type]['mon']) ? true : false; $this->rules->days->tue = isset($this->recurring_event_data['post_ar'][$this->rules->type]['tue']) ? true : false; $this->rules->days->wed = isset($this->recurring_event_data['post_ar'][$this->rules->type]['wed']) ? true : false; $this->rules->days->thu = isset($this->recurring_event_data['post_ar'][$this->rules->type]['thu']) ? true : false; $this->rules->days->fri = isset($this->recurring_event_data['post_ar'][$this->rules->type]['fri']) ? true : false; $this->rules->days->sat = isset($this->recurring_event_data['post_ar'][$this->rules->type]['sat']) ? true : false; $this->rules->days->sun = isset($this->recurring_event_data['post_ar'][$this->rules->type]['sun']) ? true : false;
У меня есть эта функция:
function calc_next_weekly_interval($ii,$i) { global $array; // we will roll through this->rules->mon,tue,wed,thu,fri,sat,sun. If its true, return the new iii value, if not keep looping through the array until we hit true again. $cur_day = strtolower(date('D',$ii)); $found_today = false; // our initial start date $iii = $ii; foreach($this->rules->days as $day => $value) { if($found_today == true && $value = true) { return $iii } // need to find the current day first! if($day == $cur_day) { $found_today = true; } $iii + SECS_PER_DAY; } }
все хорошо. Примечание. Я пытаюсь найти следующий истинный день с текущего дня. Проблема заключается в том, что когда я выполняю поиск с использованием воскресенья в качестве начального cur_day, очевидно, что цикл foreach остановится, пока не найдет истинное соответствие. Как я могу непрерывно проходить через массив (или объектные ключи)? Должен ли я помещать цикл в новую функцию и продолжать называть ее новой датой начала? Я не хочу добавлять дополнительные ключи массива -> значения, поскольку это повлияет на вещи позже, я подумал о добавлении в исходный массив только в этой функции (пример здесь, массив закодирован для справки, но в моем классе – это это, конечно, ключи obj-> значения
Если вы хотите постоянно контактировать, вы можете использовать
$infinate = new InfiniteIterator(new ArrayIterator($array)); foreach ( $infinate as $value ) { // Do your thing // Remember to break }
Как насчет
foreach($this->rules->days as $day => $value) { if($day == $cur_day) { $set = true; } $iii + SECS_PER_DAY; if($found_today == true && $value = true) { return $iii } // need to find the current day first! }