在PHP数组倒车档一样的功能 [英] Reverse range-like functionality in php arrays

查看:92
本文介绍了在PHP数组倒车档一样的功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

结果
我有一个这样的数组:

 阵列(0,2,4,5,6,7,90,91,92,93,94,95,96,97,98,99);

和我想要得到它为以下字符串:

0,2,4-7,90 +

任何例子在那里之前,我开始从我头上拔头发?结果
谢谢你。

更新:结果
这里是我服用@安迪的code,并修改了一点之后使用的最终解决方案。

 函数rangeArrayToString($ rangeArray,$最大= 99){
    排序($ rangeArray);
    $第一= $持续= NULL;
    $输出=阵列();    的foreach($ rangeArray为$项目){
        如果(第一$ === NULL){
            $第一= $持续= $项目;
        }否则如果($最后< $项目 - 1){
            $输出[] = $第== $持续多久? $第一:$第一。 - 。 $最后;
            $第一= $持续= $项目;
        }其他{
            $去年= $项目;
        }
    }    $ finalAddition = $第一;    如果($第一!= $去年){
        如果($最后== $最大值){
            $ finalAddition ='+'。
        }其他{
            $ finalAddition =' - '。 $最后;
        }
    }    $输出[] = $ finalAddition;    $输出=破灭('',$输出);
    返回$输出;
}


解决方案

  $第一= $去年= NULL;
$输出=阵列();的foreach($数组作为$项目){
    如果(第一$ === NULL){
        $第一= $持续= $项目;
    }否则如果($最后< $项目 - 1){
        $输出[] = $第== $持续多久? $第一:$第一。 - 。 $最后;
        $第一= $持续= $项目;
    }其他{
        $去年= $项目;
    }
}$输出[] = $第== $持续多久? $第一:$第一。 +;
$输出=加入('',$输出);


I have an array like this:

array(0, 2, 4, 5, 6, 7, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99);

and I want to get it as a the following string:

0, 2, 4-7, 90+

Any examples out there before I start to pull hairs from my head ?
Thanks.

UPDATE:
Here is the final solution I used after taking @Andy's code, and modifying it a bit.

function rangeArrayToString($rangeArray, $max = 99) {
    sort($rangeArray);
    $first = $last = null;
    $output = array();

    foreach ($rangeArray as $item) {
        if ($first === null) {
            $first = $last = $item;
        } else if ($last < $item - 1) {
            $output[] = $first == $last ? $first : $first . '-' . $last;
            $first = $last = $item;
        } else {
            $last = $item;
        }
    }

    $finalAddition = $first;

    if ($first != $last) {
        if ($last == $max) {
            $finalAddition .= '+';
        } else {
            $finalAddition .= '-' . $last;
        }
    }

    $output[] = $finalAddition;

    $output = implode(', ', $output);
    return $output;
}

解决方案

$first = $last = null;
$output = array();

foreach ($array as $item) {
    if ($first === null) {
        $first = $last = $item;
    } else if ($last < $item - 1) {
        $output[] = $first == $last ? $first : $first . '-' . $last;
        $first = $last = $item;
    } else {
        $last = $item;
    }
}

$output[] = $first == $last ? $first : $first . '+';
$output = join(', ', $output);

这篇关于在PHP数组倒车档一样的功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆