Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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 使用连续键对数组进行分组_Php - Fatal编程技术网

Php 使用连续键对数组进行分组

Php 使用连续键对数组进行分组,php,Php,我有一个这样的数组- Array ( [16] => 424 [17] => 404 [18] => 416 [21] => 404 [22] => 456 [23] => 879 [28] => 456 [29] => 456 [32] => 123 [35] => 465 ) 此数组的输出将是 Array ( [0] => Array

我有一个这样的数组-

 Array
(
    [16] => 424
    [17] => 404
    [18] => 416
    [21] => 404
    [22] => 456
    [23] => 879
    [28] => 456
    [29] => 456
    [32] => 123
    [35] => 465
)
此数组的输出将是

Array
(
    [0] => Array
           (   ['start'] => 16
               ['stop'] => 19
           )
    [1] => Array
           (   ['start'] => 21
               ['stop'] => 24
           )
    [2] => Array
           (
               ['start'] => 28
               ['stop'] => 30
           )
    [3] => Array
           (
               ['start'] => 32
               ['stop'] => 33
           )
    [4] => Array
           (
               ['start'] => 35
               ['stop'] => 36
           )
)
我真的不需要这些价值观。只是把钥匙分组

“开始”值应为“开始”值本身。然而,“停止”值应为连续整数

如果特定键不存在连续整数(如[32]和[35]),则“stop”应为整数+1(同上)

谢谢大家的帮助

reset($arr);
$lastKey = key($arr);
$ansIndex = -1;
$ans = array();

foreach ($arr as $k=>$v)
{
    if ($k != $lastKey + 1)
    {
         $ansIndex++;
         $ans[$ansIndex]['start'] = $k; 
    }

    $ans[$ansIndex]['stop']  = $k+1;
    $lastKey = $k;
}
编辑-将
停止
索引的$k更改为$k+1,以反映问题中的更改
编辑-注意到我在
if
else
中都有一行代码。将其从条件中取出,因为它将不受任何限制地运行

编辑-将
停止
索引的$k更改为$k+1,以反映问题中的更改

编辑-注意到我在
if
else
中都有一行代码。将其从条件中删除,因为它可以运行。

我不知道您的示例是否真的一致。对于孤立整数,停止/开始不应该相等吗?对不起,我漏了一点。问题更新,请重新检查。我不知道你的例子是否真的一致。对于孤立整数,停止/开始不应该相等吗?对不起,我漏了一点。问题已更新,请重新检查。此操作有效。请注意,$lastKey为什么设置为-1?将
reset($arr)
$lastKey
设置为
键($arr)
成功。请更新您的答案,以便我可以接受:)好的,听起来不错。我刚刚选择了
-1
作为可以依赖的东西,使其与众不同。您想要什么更改?重置在哪里?不可能在循环中<代码>键($arr)==$k在任何时候,所以为了清楚起见,我不会更改一个,除非您每次都要更改。无论如何,我看到您只是在谈论初始化。好主意,我更喜欢这个,而不是我把
-1
从屁股里拔出来。这很管用。请注意,$lastKey为什么设置为-1?将
reset($arr)
$lastKey
设置为
键($arr)
成功。请更新您的答案,以便我可以接受:)好的,听起来不错。我刚刚选择了
-1
作为可以依赖的东西,使其与众不同。您想要什么更改?重置在哪里?不可能在循环中<代码>键($arr)==$k在任何时候,所以为了清楚起见,我不会更改一个,除非您每次都要更改。无论如何,我看到您只是在谈论初始化。好主意,我更喜欢这样,而不是从屁股里拔出
-1