2

PHPの配列に関する簡単な質問があります。
これが問題です。

私はこのような配列を持っています

$week_array =   array(
                    '2013-08-18',
                    '2013-08-11',
                    '2013-08-04',
                    '2013-07-28',
                    '2013-07-21',
                );

そして、私はこれらのレコードを取得しています

$records   =   array(
                    array(  '2013-08-06'   ),
                    array(  '2013-08-05'   ),
                    array(  '2013-08-04'   ),
                    array(  '2013-08-03'   ),
                    array(  '2013-08-03'   ),
                    array(  '2013-08-02'   ),
                    array(  '2013-08-02'   ),
                    array(  '2013-08-01'   ),
                    array(  '2013-08-01'   ),
                    array(  '2013-07-31'  ),
                    array(  '2013-07-31'  ),
                    array(  '2013-07-30'  ),
                );

これが私のコードです

$week_counter = 0;              
foreach($records as $row){
    if($row['date'] < $week_array[$week_counter] && $row['date'] >=$week_array[$week_counter+1]){
        echo 'workig';
        echo '<br>';
        $week_counter++;
    }
}

条件に基づいて、サマーリーを表示したい(ここでは省略)。条件が満たされないため、何も表示されません。データが取得され、範囲が適切に満たされると、summery が表示されます。
レコードが一致する正確な範囲にポインターを移動するにはどうすればよいですか。簡単に言えば、新しい配列がこのように形成されるように、配列のいくつかの要素を削除したいのです。

$week_array    =   array(
                    '2013-08-11',
                    '2013-08-04',
                    '2013-07-28',
                    '2013-07-21',
                );              

開始日は2013-08-06最初の値と 2 番目の値の間にあるため、ポインターを 0 のままにするのではなく、最初のインデックスに移動するか、配列をスライスしたいと考えています。どうやってやるの?

もう 1 つのことは、既にサマーリーが適切に表示されているため、提供した条件を変更できないことです。

編集

$records   =   array(
                    array(  '2013-08-12'   ),
                    array(  '2013-08-09'   ),
                    array(  '2013-08-06'   ),
                    array(  '2013-08-06'   ),
                    array(  '2013-08-05'   ),
                    array(  '2013-08-04'   ),
                    array(  '2013-08-03'   ),
                    array(  '2013-08-03'   ),
                    array(  '2013-08-02'   ),
                    array(  '2013-08-02'   ),
                    array(  '2013-08-01'   ),
                    array(  '2013-08-01'   ),
                    array(  '2013-07-31'  ),
                    array(  '2013-07-31'  ),
                    array(  '2013-07-30'  ),

この配列では、1 番目と 2 番目の範囲にレコードがあることがわかります。

4

1 に答える 1

0

いくつかの調査の後、私はそれがこのように機能することを発見しました

$week_array    =   array(
                '2013-08-18',
                '2013-08-11',
                '2013-08-04',
                '2013-07-28',
                '2013-07-21',
            );

$records   =   array(
                    array(  '2013-08-06'   ),
                    array(  '2013-08-06'   ),
                    array(  '2013-08-05'   ),
                    array(  '2013-08-04'   ),
                    array(  '2013-08-03'   ),
                    array(  '2013-08-03'   ),
                    array(  '2013-08-02'   ),
                    array(  '2013-08-02'   ),
                    array(  '2013-08-01'   ),
                    array(  '2013-08-01'   ),
                    array(  '2013-07-31'  ),
                    array(  '2013-07-31'  ),
                    array(  '2013-07-30'  ),
                );
$week_counter = 0;  

if(count($week_array) > 0){
    $counter    =   0;
    foreach($week_array as $sunday){
        if($calls[0] > $sunday){
            $week_array =   array_slice($week_array, $counter );
            break;  
        }
        $counter++;
    }
}   

foreach($records as $row){
    if($row['date'] < $week_array[$week_counter] && $row['date'] >=$week_array[$week_counter+1]){
        echo 'workig';
        echo '<br>';
        $week_counter++;
    }
}

それはまさに私が望んでいたことです。ループ前に新しく生成された週配列は次のようになります

$week_array    =   array(
                '2013-08-11',
                '2013-08-04',
                '2013-07-28',
                '2013-07-21',
            );
于 2013-08-21T11:28:13.597 に答える