我有一个像这样的数组 -
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(与上述相同)。
谢谢大家的帮助。
答案 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,以反映您问题的变化
编辑 - 注意到我在if
和else
中都有一行代码。将它从条件中取出,因为它无论如何运行。