gpt4 book ai didi

php - 从数字数组生成字符串范围(1-10、13、16、17-25.. 等)的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:46:01 24 4
gpt4 key购买 nike

我正在尝试计算数组中存在的页码范围。我确实尝试用谷歌搜索它,但我只找到了不相关的帖子/页面。

我一直在处理的代码是:

$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

这样我就可以在存储有关文档的历史记录时表示页面范围。

我相信这对某些人来说会是一个很好的简单方法,我们将不胜感激任何帮助!

最佳答案

基本上您需要记住每个范围的第一个数字,并且当您要附加连字符和最后一个数字时,只有当最后一个数字不同时才这样做。像(未经测试):

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;
}

关于php - 从数字数组生成字符串范围(1-10、13、16、17-25.. 等)的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23010876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com