我正在试图计算数组中存在的数字的页面范围。我确实试图搜索谷歌,但我只找到了不相关的帖子/页面。
我一直在研究的代码是:
$numbers = array(1,3,2,4,5,6,7,8,9,11,10,15,14,13,12,16,17,18,19,20,22);
function get_number_ranges($numbers)
{
$last = null;
foreach ($numbers as $number) {
if (is_null($last)) {
$string = $number;
$last = $number;
} elseif ($last + 1 != $number) {
$string .= '-' . $last . ', ' . $number;
$last = $number;
} else {
$last = $number;
}
}
if ($last == $number) {
$string .= '-' . $number;
}
return $string;
}
这就产生了
1-1, 3-3, 2-2, 4-9, 11-11, 10-10, 15-15, 14-14, 13-13, 12-12, 16-20, 22-22
我不希望它显示重复的数字,所以我希望它看起来如下:
1, 3, 2, 4-9, 11, 10, 15, 14, 13, 12, 16-20, 22
这样我就可以在存储文档历史记录时表示页面范围。
我相信这将是一个很好的容易的some1,任何帮助都会收到很大的!
发布于 2014-04-11 11:21:14
基本上,您需要记住每个范围的第一个数字,当您添加连字符和最后一个数字时,只有在最后一个数字不同的情况下才需要这样做。类似于(未经测试的):
function get_number_ranges($numbers)
{
$last = null;
foreach ($numbers as $number) {
if (is_null($last)) {
$string = $number;
$last = $number;
$first = $number ; //Remember first
} elseif ($last + 1 != $number) {
if ($first != $last ) //Only append if different
$string .= '-' . $last ;
$string .= ', ' . $number;
$last = $number;
$first = $number ; //Remember first
} else {
$last = $number;
}
}
if ($last == $number && $last != $first) { //Only if different
$string .= '-' . $number;
}
return $string;
}
发布于 2014-04-11 11:21:54
添加一个变量以保存范围的第一个编号。如果最后一个数字等于第一个数字,那么它不是一个范围,不需要'-XX‘。
$numbers = array(1,3,2,4,5,6,7,8,9,11,10,15,14,13,12,16,17,18,19,20,22);
function get_number_ranges($numbers)
{
$last = null;
$firstFromRange = null;
foreach ($numbers as $number) {
if (is_null($last)) {
$string = $number;
$firstFromRange = $number; // new range begins, save the number
} elseif ($last + 1 != $number) {
if ($firstFromRange == $last) { // if the range is only one number, don't add '-' . $last
$string .= ', ' . $number;
} else {
$string .= '-' . $last . ', ' . $number;
}
$firstFromRange = $number; // new range begins, save the number
}
$last = $number;
}
if ($last == $number && $last != $firstFromRange) {
$string .= '-' . $number;
}
return $string;
}
发布于 2014-04-11 11:50:35
我想你是在找这样的东西
<?php
$numbers = array(1,3,2,4,5,6,7,8,9,11,10,15,14,13,12,16,17,18,19,20,22);
function get_number_ranges($numbers){
$result = '';
if( is_array($numbers) ){
$start = $end = array_shift($numbers);
for($i=0,$c=count($numbers);$i<$c;$i++){
if($end == $numbers[$i]-1){
$end = $numbers[$i];
}else{
$result .= ($start == $end) ? $start: $start.'-'.$end;
$result .= ',';
$start = $end = $numbers[$i];
}
}
$result .= ($start == $end) ? $start: $start.'-'.$end;
}
return $result;
}
echo get_number_ranges($numbers );
参见代码页结果http://codepad.org/l1JUSVJO
https://stackoverflow.com/questions/23010876
复制相似问题