2011-01-05 93 views
0

我有一个这样的数组 -分组阵列连续键

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(与上面相同)。

谢谢大家的帮助。

+0

我不知道你的例子是否真的一致。对于孤独的整数不应该停止/开始是平等的? – 2011-01-05 05:57:33

+0

对不起,我错过了一个观点。问题更新后,请重新检查。 – kapeels 2011-01-05 06:02:24

回答

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

编辑 - 改变$ K至$ K + 1的stop指标,以反映你的问题
编辑变化 - 发现我有两个ifelse内的一行代码。因为它不管运行,所以将它从条件中删除。

+0

这工作。请注意,为什么$ lastKey设置为-1?把'reset($ arr)'和'$ lastKey'设置为'key($ arr)'都有诀窍。请更新您的答案,以便我可以接受它:) – kapeels 2011-01-05 06:14:04

+0

好听起来不错。我只是选择了'-1'作为可以依赖的东西 – 2011-01-05 06:19:17

+0

你想要做什么改变?这个重置在哪里?不能在循环内。 'key($ arr)=== $ k'在任何时候,为了清楚起见,我不会改变一个,除非你每次都会改变 – 2011-01-05 06:22:02