Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 值前后的Foreach循环数组键_Php - Fatal编程技术网

Php 值前后的Foreach循环数组键

Php 值前后的Foreach循环数组键,php,Php,我有这个密码 <?php $starttime = '5'; $endtime = '17'; $timings = array( '0' => '12AM', '1' => '1AM', '2' => '2AM', '3' => '3AM', '4' => '4AM', '5' => '5AM', '6' => '6AM', '7' => '7AM',

我有这个密码

<?php 
$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循环中传递计时

但在通过foreach循环之前,我想调整开始时间和结束时间之间的计时

这里我的开始时间键是
5
。结束时间键为
17

因此,我想从数组中删除
5,6,7,8,9,10,11,12,13,14,15,16,17
,并保留剩余的


有人能告诉我怎么把它拿出来吗

切片和合并

就这样使用:

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

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

拼接

另一种更简单、更高效的方法是使用。请注意,它返回提取的数组,并更改原始数组,因此不要将结果放在$timings内

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

array_splice($timings,
             intval($starttime),
             (intval($endtime) - intval($starttime))
            );

切片和合并

就这样使用:

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

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

拼接

另一种更简单、更高效的方法是使用。请注意,它返回提取的数组,并更改原始数组,因此不要将结果放在$timings内

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

array_splice($timings,
             intval($starttime),
             (intval($endtime) - intval($starttime))
            );

嗨,谢谢你的回答。我试过你的密码。但事实恰恰相反。它保留
5,6,7,8,9,10,11,12,13,14,15,16,17而不是从数组中删除。你能告诉我怎么解决吗?@Giri:我用另一种方法编辑了答案。当我使用
$starttime='0'时,可能甚至比使用array_diff()@ltay更有效率$endtime='23'它仍然只保留最后一个值。知道怎么解决吗?@Giri:也许你应该在第二个数组偏移量上加1。像这样:array_slice($timings,(intval($endtime)+1))@Giri:我使用array_splice添加了一个更好的解决方案。您好,谢谢您的回答。我试过你的密码。但事实恰恰相反。它保留
5,6,7,8,9,10,11,12,13,14,15,16,17而不是从数组中删除。你能告诉我怎么解决吗?@Giri:我用另一种方法编辑了答案。当我使用
$starttime='0'时,可能甚至比使用array_diff()@ltay更有效率$endtime='23'它仍然只保留最后一个值。知道怎么解决吗?@Giri:也许你应该在第二个数组偏移量上加1。比如:array_slice($timings,(intval($endtime)+1))@Giri:我添加了一个使用array_拼接的更好的解决方案。