0

配列を途中から最後までループし、最初から最後までループするより良い解決策があるかどうか疑問に思っていました。特に連想配列の場合。

たとえば、キーを持つ連想配列がある場合

$dow = array(Mon => etc, Tue => etc, Wed  => etc, Thr  => etc .. to .. Sun  => etc). 

木曜日から配列の検索を開始して、いつでも可能であるがたまたま火曜日にある特定のもので翌日を見つけます。通常、木曜日から日曜日まで(インデックスで)反復し、リセットして月曜日から水曜日まで再び開始し、見つけます火曜到達時が対象。

ID を介してインデックスをカウントし、6 に達したら ID を 0 にリセットします

 $id = 3 // Found day is Thursday id

//Loop function starts here   
$id++; // start search from one day above found day
 if ($id >= 6){ //when reaching Sunday
    $id = 0 // start search from monday
  }  
// check array here for that specific thing

したがって、質問は、これよりも簡単な解決策があるかどうかを尋ねることです。つまり、配列をインデックス木曜日から日曜日に分割し、それを配列の先頭に追加してから、インデックスをカウントせずにループを実行します。カウント インデックスを使用しないソリューション。

4

4 に答える 4

0
<?php

    $dow = array("mon","tue","wed","thu","fri","sat","sun");

    $pick_a_day = 2; // user input; NON zero based. monday = 1
    $pick_a_day--; // make it zero based to use in code

    foreach($dow as $inc => $an_element )
    {
        echo $dow[($pick_a_day+(count($dow))) % (count($dow))]." - loop number:".($inc+1)."\n";
        $pick_a_day++;
    }

?>

出力

tue - loop number:1
wed - loop number:2
thu - loop number:3
fri - loop number:4
sat - loop number:5
sun - loop number:6
mon - loop number:7
于 2013-05-28T07:20:24.607 に答える
0

array_spliceで試すことができます:

$array = array(1,2,3,4,5,6,7);

$lastDays = array_splice($array, 3);
$firstDays = $array;

print_r(array('first days' => $firstDays, 'last days' => $lastDays));

その日が in でない場合$lastDays( のようなブール値を使用$matchFound)、 in を検索し$firstDaysます。

または単にarray_mergeで使用します:

$array = array(1,2,3,4,5,6,7);

$array = array_merge(array_splice($array, 3), $array);
print_r($array);

出力は次のとおりです。

Array
(
    [0] => 4
    [1] => 5
    [2] => 6
    [3] => 7
    [4] => 1
    [5] => 2
    [6] => 3
)

で検索できますforeach

于 2013-05-28T07:15:49.620 に答える