我想破坏一个阵列,但有一点不同.我想将间隔与-符号合并.如何才能做到这一点?(数组已订购!)
例子:
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)
这应该适合你:
首先,对于每次迭代,我们只需将当前迭代次数附加到$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)