如何在特定索引处启动PHP foreach循环,仍然可以完成整个循环?

时间:2014-06-04 15:11:05

标签: php arrays sorting

我有一个数组,其中以星期几作为关键字(Mon,Tue等)。在进行循环时,我想在特定的一天开始,然后继续整个循环,这样我就能度过所有的日子。有关如何做到这一点的任何想法?

3 个答案:

答案 0 :(得分:1)

编辑:错过了您需要按键搜索。以下应该有效:

$days = array('wed' => 2, 'thu' => 3, 'fri' => 4, 'sat' => 5, 'sun' => 6, 'mon' => 0, 'tue' => 1);

if ($off = array_search('mon', array_keys($days))) {
    $result = array_merge(array_slice($days, $off, null, true), array_slice($days, 0, $off, true));
    echo print_r($result, true);
}

/*
Array
(
    [mon] => 0
    [tue] => 1
    [wed] => 2
    [thu] => 3
    [fri] => 4
    [sat] => 5
    [sun] => 6
)
 */

说明:使用array_keys查找目标数组中键的数字索引。然后使用array_mergearray_splice将数组切割成两部分,从索引到数组末尾的所有内容以及从索引开始到索引之前的所有内容。

答案 1 :(得分:0)

使用for循环:

//there are 7 days of the week, 0-6 in an array
$days = array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
$startIndex = 4; //the INDEX day we are starting at
$offset = 0;  

//loop through 7 times regardless
for($i=0; $i<7; $i++){
    $dayIndex = $startIndex+$offset;
    echo $days[$dayIndex];           //day we want
    if($dayIndex == 6){              //we want to start from the beginning 
        $offset = $startIndex * -1;  //multiply by -1 so $startIndex+$offset will eval to 0
    }else{
        $offset++;
    }
}

答案 2 :(得分:-1)

如果您只想从特定索引进行迭代,请尝试

$days = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');
foreach (array_slice($days, 2) as $day)
    echo($day . "\n");

它将从索引2迭代到最后一项。它可以与任何键完全相同。