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