0

24 時間制の「軍事」時刻を表すキーと、12 時間制の「午前/午後」時刻を表す値を持つ入力配列があります。「軍事」時間値を含む 2 つの変数によって決定される配列から、連続する要素を削除したいと考えています。

ここに私の入力変数があります:

$starttime = '5';
$endtime = '17';
$timings = array(
     '0' => '12AM',
     '1' => '1AM',
     '2' => '2AM',
     '3' => '3AM',
     '4' => '4AM',
     '5' => '5AM',
     '6' => '6AM',
     '7' => '7AM',
     '8' => '8AM',
     '9' => '9AM',
     '10' => '10AM',
     '11' => '11AM',
     '12' => '12PM',
     '13' => '1PM',
     '14' => '2PM',
     '15' => '3PM',
     '16' => '4PM',
     '17' => '5PM',
     '18' => '6PM',
     '19' => '7PM',
     '20' => '8PM',
     '21' => '9PM',
     '22' => '10PM',
     '23' => '11PM',
);

foreach ($timings as $t) {
    
}

foreach ループでタイミングを繰り返したいのですが、その前に、開始時刻と終了時刻の間のタイミングを削除したいと考えています。

ここに私の$starttimeキーは5あり、私の$endtimeキーは17です。

5,6,7,8,9,10,11,12,13,14,15,16,17したがって、配列から削除して、残りの要素を保持したいと思います。

これらの要素をポップアウトする方法を教えてもらえますか?

4

2 に答える 2

4

スライスとマージ

次のようにarray_slicearray_mergeを使用するだけです。

$starttime = '5';
$endtime = '17';

$timings = array_merge(
              array_slice($timings, 0, intval($starttime)),
              array_slice($timings, intval($endtime) + 1)
           );

スプライス

よりシンプルで (取るに足らない) より効率的な別の方法は、array_spliceを使用することです。抽出された配列を返し、元の配列を変更することに注意してください。したがって、結果を $timings 内に配置しないでください。

$starttime = '5';
$endtime = '17';

array_splice($timings,
             intval($starttime),
             (intval($endtime) - intval($starttime))
            );
于 2013-08-16T00:42:13.580 に答える