首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用它们的差异对所有连续数字进行分组

用它们的差异对所有连续数字进行分组
EN

Stack Overflow用户
提问于 2012-08-21 16:26:26
回答 1查看 231关注 0票数 0

如何对关联数组中的连续数字之间的所有差异进行分组?下面是我使用的数组

需要分组(2,3)(7,8)与其不同,忽略(11,6,5,9)

代码语言:javascript
运行
复制
$array = array(
    2 =>"12",
    3 =>"12",
    11 => "16",
    6 => "15",
    5 => "14",
    7 => "16",
    8 => "17",
    9 => "18")

下面是我用来对数组进行分组的代码,但它不起作用:

代码语言:javascript
运行
复制
foreach ($array as $k => $v) {
    echo  $prev;
    if (isset($prev)) {
        if (($v - $prev) != 1) $newArray[] = $v;
    } else { $newArray[] = $v; }
    $prev = $v;
}
echo '<pre>';
print_r($newArray);

现在我得到了这个:

代码语言:javascript
运行
复制
Array
(
    [0] => 12
    [1] => 12
    [2] => 16
    [3] => 15   
    [4] => 16
)

,但我需要O/P为 (2,3)=0差分,(7,8)=1差分,即。

代码语言:javascript
运行
复制
array(
    [0]=>0,
    [1]=>1
);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-21 17:03:30

所以给你。

代码语言:javascript
运行
复制
$newArray = array();
foreach ($array as $k => $v) {
    if (isset($prev) && $k == $prev + 1) {
        $newArray[] = $v - $array[$prev];
    }
    $prev = $k;
}

这将产生连续三对的数组:

代码语言:javascript
运行
复制
Array
(
    [0] => 0
    [1] => 1
    [2] => 1
)

如果您想在两对之后停止,在foreach之前添加一个运行计数器foreach,然后在循环中的if中使用if (++$i >= 2) break;退出:

代码语言:javascript
运行
复制
$newArray = array();
$i = 0;
foreach ($array as $k => $v) {
    if (isset($prev) && $k == $prev + 1) {
        $newArray[] = $v - $array[$prev];
        if (++$i >= 2) break;
    }
    $prev = $k;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12059219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档