从数组中的特定点继续foreach循环

时间:2014-06-27 23:47:39

标签: php

我有一个包含很多小时的数组:

$hours = array(
    '06:00', '06:30', '07:00', '07:30', '08:00', '08:30', '09:00', '09:30', 
    '10:00', '10:30', '11:00', '11:30', '12:00', '12:30', '13:00', '13:30', 
    '14:00', '14:30', '15:00', '15:30', '16:00', '16:30', '17:00', '17:30', 
    '18:00', '18:30', '19:00', '19:30', '20:00', '20:30', '21:00', '21:30',
    '22:00', '22:30', '23:00', '23:30', '00:00', '00:30', '01:00', '01:30', 
    '02:00', '02:30', '03:00', '03:30', '04:00', '04:30', '05:00', '05:30', 
);

我想从特定点开始循环,例如'12:30'

我曾尝试使用'continue'(如下所示),但这会被忽略。我有什么想法吗?

foreach ($hours as $hour) {
     if ($hour == '12:30') continue;
     echo $hour . '<br>';
}

3 个答案:

答案 0 :(得分:1)

$hours = array(
    '06:00', '06:30', '07:00', '07:30', '08:00', '08:30', '09:00', '09:30', 
    '10:00', '10:30', '11:00', '11:30', '12:00', '12:30', '13:00', '13:30', 
    '14:00', '14:30', '15:00', '15:30', '16:00', '16:30', '17:00', '17:30', 
    '18:00', '18:30', '19:00', '19:30', '20:00', '20:30', '21:00', '21:30',
    '22:00', '22:30', '23:00', '23:30', '00:00', '00:30', '01:00', '01:30', 
    '02:00', '02:30', '03:00', '03:30', '04:00', '04:30', '05:00', '05:30', 
);

$start = array_search('12:30',$hours);

foreach($hours as $key => $hour) {
    if($key < $start)
        continue;

    print "$hour\n";
}

或者如评论中所建议的那样(这更快)

$start = array_search('12:30',$hours);

for($i = $start; $i < count($hours); $i++) {
    print $hours[$i] . "\n";
}

答案 1 :(得分:0)

更改为:

if ($hour < '12:30') {
    continue;
}

您的代码只跳过一次,它不会跳过它之前的所有代码。

另一种方法是获取所需小时的位置,并使用正常的for循环:

foreach ($i = array_search('12:30', $hours); $i !== false && $i < count($hours); $i++) {
    $hour = $hours[$i];
    echo $hour . "<br";
}

答案 2 :(得分:0)

首先找到引用&#39; 12:30&#39;的密钥,如果找到,则从该密钥开始循环遍历$ hours数组。

if ( $key = array_search('12:30', $hours) ) {
  for ( ; $key < count($hours); $key++ ) {
    print $hours[$key] . '<br>'; 
  } 
}
相关问题