Php 如何获取数组中的第一个和最后一个时间序列
我一天中有一系列不同的时间,每15分钟一次Php 如何获取数组中的第一个和最后一个时间序列,php,Php,我一天中有一系列不同的时间,每15分钟一次 Array ( [0] => 12:00am [1] => 12:15am [2] => 12:30am [3] => 12:45am [4] => 1:00am [5] => 1:15am [6] => 1:30am [7] => 1:45am [8] => 2:00am [9] => 3:15am [10] => 3:30am [11] => 3:45am [12] =>
Array
(
[0] => 12:00am
[1] => 12:15am
[2] => 12:30am
[3] => 12:45am
[4] => 1:00am
[5] => 1:15am
[6] => 1:30am
[7] => 1:45am
[8] => 2:00am
[9] => 3:15am
[10] => 3:30am
[11] => 3:45am
[12] => 4:00am
[13] => 1:00pm
[14] => 1:15pm
[15] => 1:30pm
);
我想做的是,按顺序将它们组合在一起,然后将它们放入另一个数组中
基于上面的数组,我会得到3个新的数组
Array
(
[0] => 12:00am
[1] => 12:15am
[2] => 12:30am
[3] => 12:45am
[4] => 1:00am
[5] => 1:15am
[6] => 1:30am
[7] => 1:45am
[8] => 2:00am
);
12:00是主阵列的开始,2:00am是模式停止的位置,因为下一个是3:15
array
{
[1] => 3:15am
[2] => 3:30am
[3] => 3:45am
[4] => 4:00am
)
3:15am是主阵列中新图案的开始,4:00am是图案停止的地方,依此类推
我一直在尝试通过主阵列进行循环,并存储上一次的时间以匹配当前循环+15分钟,但根本无法使其正常工作,非常感谢任何帮助,谢谢我制作了一个阵列,将时间分为小时和上午/下午。这是你想要的吗
<?php
$input =
[
"12:00am", "12:15am", "12:30am", "12:45am",
"1:00am", "1:15am", "1:30am", "1:45am",
"2:00am", "3:15am", "3:30am", "3:45am",
"4:00am", "1:00pm", "1:15pm", "1:30pm",
];
// Prepare array
$periods = [];
// Loop all times in input
foreach($input as $time) {
$hour = substr($time, 0, strpos($time, ':'));
$partOfDay= substr($time, strlen($time) - 2);
$periods[$hour][$partOfDay][] = $time;
}
var_dump($periods);
我制作了一个数组,将时间分为小时和上午/下午。这是你想要的吗
<?php
$input =
[
"12:00am", "12:15am", "12:30am", "12:45am",
"1:00am", "1:15am", "1:30am", "1:45am",
"2:00am", "3:15am", "3:30am", "3:45am",
"4:00am", "1:00pm", "1:15pm", "1:30pm",
];
// Prepare array
$periods = [];
// Loop all times in input
foreach($input as $time) {
$hour = substr($time, 0, strpos($time, ':'));
$partOfDay= substr($time, strlen($time) - 2);
$periods[$hour][$partOfDay][] = $time;
}
var_dump($periods);
谢谢@Wimanicesir
它只是逻辑和增强的代码
<?php
$input = Array
(
"12:00am",
"12:15am",
"12:30am",
"12:45am",
"1:00am",
"1:15am",
"1:30am",
"1:45am",
"2:00am",
"3:15am",
"3:30am",
"3:45am",
"4:00am",
"1:00pm",
"1:15pm",
"1:30pm",
);
$periods = [];
foreach($input as $time) {
$hour = substr($time, 0, strpos($time, ':'));
$partOfDay= substr($time, strlen($time) - 2);
$index = ($hour== "12") ? "0" : floor($hour/2.00001);
$periods[$index.":".$partOfDay][] = $time;
}
echo "<pre>";
var_dump($periods);
echo "</pre>";
exit();
?>
谢谢你@Wimanicesir
它只是逻辑和增强的代码
<?php
$input = Array
(
"12:00am",
"12:15am",
"12:30am",
"12:45am",
"1:00am",
"1:15am",
"1:30am",
"1:45am",
"2:00am",
"3:15am",
"3:30am",
"3:45am",
"4:00am",
"1:00pm",
"1:15pm",
"1:30pm",
);
$periods = [];
foreach($input as $time) {
$hour = substr($time, 0, strpos($time, ':'));
$partOfDay= substr($time, strlen($time) - 2);
$index = ($hour== "12") ? "0" : floor($hour/2.00001);
$periods[$index.":".$partOfDay][] = $time;
}
echo "<pre>";
var_dump($periods);
echo "</pre>";
exit();
?>
代码:
代码:
这是一个函数:
这是一个函数:
我使用strotime()将时间转换为unix时间戳,并计算与下一个元素的差异
$arr=['12:00am'、'12:15am'、'12:30am'、'12:45am'、'1:15am'、'1:30am'、'1:45am'、'2:00am'、'3:15am'、'3:30am'、'4:00am'、'1:00pm'、'1:15pm';
$new=[];
$temp=[];
$total=计数($arr);
对于($i=0;$i<$total;$i++){
$k=$i+1;
//900-相差15分钟
如果(isset($arr[$k])&&STROTIME($arr[$k])-STROTIME($arr[$i])==900){
$temp[]=$arr[$i];
}否则{
$temp[]=$arr[$i];
$new[]=$temp;
$temp=[];
}
}
印刷(新);
我使用strotime()将时间转换为unix时间戳,并计算与下一个元素的差异
$arr=['12:00am'、'12:15am'、'12:30am'、'12:45am'、'1:15am'、'1:30am'、'1:45am'、'2:00am'、'3:15am'、'3:30am'、'4:00am'、'1:00pm'、'1:15pm';
$new=[];
$temp=[];
$total=计数($arr);
对于($i=0;$i<$total;$i++){
$k=$i+1;
//900-相差15分钟
如果(isset($arr[$k])&&STROTIME($arr[$k])-STROTIME($arr[$i])==900){
$temp[]=$arr[$i];
}否则{
$temp[]=$arr[$i];
$new[]=$temp;
$temp=[];
}
}
印刷(新);
我真的不明白你从哪里得到凌晨2点或3点15分,你是说我从哪里得到它?也许你应该描述一下你试图使用的模式?另外,在12:00之后,你通常会得到下午1点,不是吗?你是如何决定在凌晨2点分开,然后在凌晨3:15重新开始的模式是,时间每隔15分钟上升一次,所以在循环时,如果前一个元素不是当前元素的-15分钟,则将所有前一个元素保存到单独的数组中,并继续进行其余的操作。我真的不明白你从哪里获得凌晨2点或凌晨3点15分,你是什么意思我从哪里获得它?也许你应该描述你试图使用的模式?另外,在12:00之后,你通常会得到下午1点,不是吗?你是如何决定在凌晨2点分开,然后在凌晨3:15重新开始的模式是,时间每隔15分钟上升一次,所以在循环时,如果前一个元素不是当前元素的-15分钟,则将所有前一个元素保存到单独的数组中,并继续进行其余的操作。抱歉,不是,基于该数组,我希望循环遍历它并创建3个新数组。第一个从12:00am开始到凌晨2:00am结束(15分钟模式停止),第二个从凌晨3:15am开始(新模式开始),到凌晨4:00am结束(模式停止),第三个从下午1:00pm开始(新模式开始)模式是15分钟间隔抱歉,但不是,基于该阵列,我想循环并创建3个新阵列。第一次从12:00am开始到凌晨2:00am结束(15分钟模式停止),第二次从凌晨3:15am开始到凌晨4:00am结束(新模式停止),第三次从下午1:00pm开始到下午1:00pm结束(新模式开始)模式是15分钟间隔我认为这不正确,OP在我的代码下面的注释中阐明,必须拆分的数组的条件是15分钟的间隔。如果超过此值,则应启动一个新阵列。在您的结果中,它分为1:00和1:15。但是,如果您尝试并提到您使用了我的代码(不是很多人这么做:),它会将您的阵列拆分为两个小时的插槽阵列。上午12:00至凌晨2:00和凌晨2:01至凌晨4:00至下午12:00至下午2:00。请不要与输出数组的索引混淆。@Wimanicesir-我同意你的意见,根据你的意见,OP必须生成带有时间值和数组的简单逻辑。我认为这不正确,OP在我的代码下面的注释中澄清了必须拆分的数组的条件是15分钟的间隔。如果超过此值,则应启动一个新阵列。在您的结果中,它分为1:00和1:15。但是,如果您尝试并提到您使用了我的代码(不是很多人这么做:),它会将您的阵列拆分为两个小时的插槽阵列。上午12:00至凌晨2:00和凌晨2:01至凌晨4:00至下午12:00至下午2:00。请不要与输出数组的索引混淆。@Wimanicesir-我同意您的意见,根据您的意见,OP必须生成带有时间值和数组的简单逻辑。
array(3) {
[0]=>
array(9) {
[0]=>
string(7) "12:00am"
[1]=>
string(7) "12:15am"
[2]=>
string(7) "12:30am"
[3]=>
string(7) "12:45am"
[4]=>
string(6) "1:00am"
[5]=>
string(6) "1:15am"
[6]=>
string(6) "1:30am"
[7]=>
string(6) "1:45am"
[8]=>
string(6) "2:00am"
}
[1]=>
array(4) {
[0]=>
string(6) "3:15am"
[1]=>
string(6) "3:30am"
[2]=>
string(6) "3:45am"
[3]=>
string(6) "4:00am"
}
[2]=>
array(3) {
[0]=>
string(6) "1:00pm"
[1]=>
string(6) "1:15pm"
[2]=>
string(6) "1:30pm"
}
}
<?php
$input = [
"12:00am",
"12:15am",
"12:30am",
"12:45am",
"1:00am",
"1:15am",
"1:30am",
"1:45am",
"2:00am",
// gap here
"3:15am",
"3:30am",
"3:45am",
"4:00am",
// gap here
"1:00pm",
"1:15pm",
"1:30pm",
];
$period = 15;
$result = split_periods($input, $period);
var_dump($result);
function split_periods($times, $period) {
$standard_diff = $period * 60;
$separated = [];
$last_time = null;
$n = 0;
foreach ($times as $time) {
$current_time = strtotime($time);
if ($last_time) {
$diff = $current_time - $last_time;
if ($diff != $standard_diff) {
++$n;
}
}
$separated[$n][] = $time;
$last_time = $current_time;
}
return $separated;
}
$arr = ['12:00am','12:15am','12:30am','12:45am','1:00am','1:15am','1:30am','1:45am','2:00am','3:15am','3:30am','3:45am','4:00am','1:00pm','1:15pm','1:30pm'];
$new = [];
$temp = [];
$total = count($arr);
for($i=0; $i< $total;$i++){
$k = $i+1;
//900 - it is 15 mins difference
if(isset($arr[$k]) && strtotime($arr[$k]) - strtotime($arr[$i]) == 900){
$temp[] = $arr[$i];
}else{
$temp[] = $arr[$i];
$new[] = $temp;
$temp = [];
}
}
print_r($new);