函数功能:获取比较值在一串列表元素中所偏向的位置。
试例说明:假若论坛发帖数0-100帖爲初级会员、100-200爲进阶会员、200-300是中级会员、
300-500是高级会员、500-600是黄金会员。那麽这里会形成一个列表,即"100,200,300,500,600",
如果我们现在的发帖数爲120帖,那麽我们通过GetListBasePoint可计算出该用户的所属范围值是
在100这个级别。
该函数的应用范围主要针对于数字型列表的,本人在编写在线商城时诸如会员级别,多少金额
可赠送礼品等处都用及该函数,如果有何漏洞,请诸位及时与本人联系,谢谢。
<cfscript>function GetListBasePoint(List,NewListValue){ //先将基点设定爲列表,然后将对比值追加入列表,然后将列表进行昇幂排序,并取得追加值在列表中的位置, //最后获取该位置前一位置的基点值 delimiter=","; if (ArrayLen(arguments) eq 3){ delimiter = arguments[3]; } //删除列表中重復值 list = ListDeleteDuplicates(list); //如果新值在输入的列表里已经有,即:与某个具体点的基点值一样,那麽直接找到该基点 //否则将比较值插入列表,并对新列表进行昇幂排序,最后得到比较值在列表中的位置 //如果处列表中第一位,那麽就取第2位的值,如果处列表中最后一位,那麽就取倒数第二位的值 //如果处于中间位置,那麽就取前一位的值 if (ListFindNoCase(list,NewListValue,delimiter) neq 0){ MatchBasePoint = ListGetAt(List,ListFindNoCase(list,NewListValue,delimiter),delimiter); }else{ BasePointList = ListAppend(List,NewListValue,delimiter); BasePointList = ListSort(BasePointList,"Numeric","asc",delimiter); GetTotallingPos = ListFindNoCase(BasePointList,NewListValue,delimiter); if (GetTotallingPos eq 1){ MatchBasePoint = ListGetAt(BasePointList,2,delimiter); }else if(GetTotallingPos eq listLen(BasePointList,delimiter)){ MatchBasePoint = ListGetAt(BasePointList,listLen(BasePointList,delimiter)-1,delimiter); }else{ MatchBasePoint = ListGetAt(BasePointList,GetTotallingPos - 1,delimiter); } } return MatchBasePoint;} </cfscript>
示例:
<cfoutput>#GetListBasePoint("100,200,300,500,600","120")#</cfoutput>
输出结果:100