通过逗号和合并间隔将已排序的数字数组内联到字符串

Ite*_*tor 2 php arrays string

我想破坏一个阵列,但有一点不同.我想将间隔与-符号合并.如何才能做到这一点?(数组已订购!)

例子:

array(1,2,3,6,8,9) => "1-3,6,8-9"
array(2,4,5,6,8,10) => "2,4-6,8,10"
Run Code Online (Sandbox Code Playgroud)

Riz*_*123 8

这应该适合你:

首先,对于每次迭代,我们只需将当前迭代次数附加到$result字符串:

$result .= $arr[$i];
Run Code Online (Sandbox Code Playgroud)

在此之后,我们检查一个while循环,如果数组(1)中存在下一个元素,并且它跟随当前迭代中的数字(2).我们这样做,直到条件评估为false:

//(1)Check if next element exists     (2)Check if next element follows up the prev one
      ?????????????????    ??????????????????????????      
while(isset($arr[$i+1]) && $arr[$i] + 1 == $arr[$i+1] && ++$range)
    $i++;
Run Code Online (Sandbox Code Playgroud)

然后我们检查是否有范围(例如1-3).如果是,那么我们将短划线和范围的结束号附加到结果字符串:

if($range)
    $result .= "-" . $arr[$i];
Run Code Online (Sandbox Code Playgroud)

最后,我们还检查我们是否在数组的末尾,不再需要附加逗号:

if($i+1 < $l)
    $result .= ",";
Run Code Online (Sandbox Code Playgroud)

码:

<?php

    $arr = array(1,2,3,6,8,9);
    $result = "";
    $range = 0;

    for($i = 0, $l = count($arr); $i < $l; $i++){

        $result .= $arr[$i];

        while(isset($arr[$i+1]) && $arr[$i] + 1 == $arr[$i+1] && ++$range)
            $i++;

        if($range)
            $result .= "-" . $arr[$i];

        if($i+1 < $l)
            $result .= ",";

        $range = 0;   

    }

    echo $result;

?>
Run Code Online (Sandbox Code Playgroud)

输出:

1-3,6,8-9
Run Code Online (Sandbox Code Playgroud)