我有一个整数数组,其中有一个中断(甚至可能是多个中断),我需要将数组拆分为存在的数据,这样:
$input = (1,2,3,6,7,8,11,12,13)
$output[1] = (1,2,3)
$output[2] = (6,7,8)
$output[3] = (11,12,13)
我处理的是一组相当大的数据(时间),所以内存优化一直是我的一个难点($ i ++有点毛茸茸)。
感谢您的帮助!
更多信息:
我从较大的时间范围开始(strtotime / 60开始和结束的值),因此我的原始数组包含在相关时间范围内的许多分钟。由于有些人可能只注册了部分时间,我会减去已经涵盖的值,让我有一些需要填充的时间。我希望将它们解析为多个数组(我真的只需要最小值和最大值,但我可以轻松地将它们隔离开来),以便我可以使用它们来突出显示开放时间。希望这不会太令人困惑 - 谢谢所有已回复的人!
答案 0 :(得分:0)
好问题,你走了。每次数字序列中断时(如测试用例所示),此代码将创建一个新的子数组。
<?php
$input = array(1,2,3,6,7,8,11,12,13);
sort($input);
$i=0;
$output=array();
$previous=NULL;
foreach($input as $value)
{
if($value>$previous+1)
{
$i++;
}
$output[$i][]=$value;
$previous=$value;
}
print_r($output);
<强> Fiddle 强>