1

私は一連のオブジェクトキーを持っています:

            $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ループが真の一致を見つける前に停止することです。配列(またはオブジェクトキー)を継続的にループするにはどうすればよいですか?ループを新しい関数に入れて、新しい開始日で呼び出し続ける必要がありますか?後で物事に影響を与えるので、余分な配列キー->値を追加したくありません。この関数でのみ初期配列に追加することを考えました(ここの例では、配列は参照用にコード化されていますが、私のクラスでは-それもちろんobjkeys->valuesです

4

2 に答える 2

3

継続的にループしたい場合は、

$infinate = new InfiniteIterator(new ArrayIterator($array));
foreach ( $infinate as $value ) {

    // Do your thing
    // Remember to break

}
于 2012-10-16T00:06:17.230 に答える
1

どうですか

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!


}
于 2012-10-16T00:06:33.790 に答える