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

时间:2011-01-05 05:51:31

标签: 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
           (   ['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
           )
)

我真的不需要这些值。只需将密钥分组。

'start'值应该是'start'值本身。然而,'stop'值应该是一个连续的整数。

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

谢谢大家的帮助。

1 个答案:

答案 0 :(得分:5)

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;
}

编辑 - 为stop索引将$ k更改为$ k + 1,以反映您问题的变化 编辑 - 注意到我在ifelse中都有一行代码。将它从条件中取出,因为它无论如何运行。