PHP:7.4
首先创建一个数组
$chars=array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
这个数组将作为字典使用
这是主要函数
function NextValue($value, $array, $length = null)
{
$valueArray = str_split($value); //将字符串解析为数组
$valueArray = array_reverse($valueArray); //将数组倒叙
$charLength = count($array) - 1; //统计字典长度
$chatNumber = array(); //初始化字符数组
$iTemp = 0; //零时变量
//获取字符对应的数字的数组(str => int) --开始
foreach ($array as $temp) {
$chatNumber[$temp] = $iTemp; //建立对应
$iTemp++; //临时变量+1
}
//获取字符对应的数字的数组(str => int) --结束
$i = 0; //设置次数变量
$maxValueNumber = count($valueArray); //统计字符串数组长度
$add = false; //零时变量,判断是否进位
//进位算法 --开始
foreach ($valueArray as $temp) {
if (isset($chatNumber[$temp]) == false) {//判断字典中是否存在该字符
$i++;//零时变量+1
continue;//跳过
}
if ($add == true) { //判断是否进位
if ($temp == $array[$charLength]) { //判断是否需要进位
$valueArray[$i] = $array[0]; //将当前字符进位,复制为字典中的第一个字符
$i++; //零时变量+1
if ($i == $maxValueNumber) {
$valueArray[$maxValueNumber] = $array[0]; //字符串位数+1,加的内容为字典中的第一个字符
}
continue;//跳过
}
$valueArray[$i] = $array[$chatNumber[$temp] + 1]; //字符进位
break;//退出
}
if ($temp == $array[$charLength]) { //判断是否需要进位
$add = true; //确认进位
$valueArray[$i] = $array[0]; //将当前字符进位,复制为字典中的第一个字符
$i++; //零时变量+1
if ($i == $maxValueNumber) { //判断是否为第一位
$valueArray[$maxValueNumber] = $array[0]; //字符串位数+1,加的内容为字典中的第一个字符
}
continue;//跳过
}
$valueArray[$i] = $array[$chatNumber[$temp] + 1]; //字符进位
break;//退出
}
if ($length != null && $length < count($valueArray)) {
$valueArray[$i] = "";
}
//进位算法 --结束
$result = ""; //设置结果临时数组
$valueArray = array_reverse($valueArray); //将数组恢复正序
foreach ($valueArray as $temp) {
$result .= $temp; //拼接字符串
}
return $result; //输出结果
}
调用函数
参数 | 字段 |
---|---|
$value | 需要排列的字符串(若在字典中未查找到此字符,则自动跳过) |
$array | 字典,JSON格式 |
$length | 长度,整数int(字典中不存在的字符也包含在内) |
返回结果
排列后的字符串
测试代码
<?php
$chars = array(
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
);
$value = "a%aaaa";
for ($i = 0; $i < 6000; $i++) {
$value = NextValue($value, $chars);
echo $value . "\r\n";
}
function NextValue($value, $array, $Length = null)
{
$valueArray = str_split($value);
$valueArray = array_reverse($valueArray);
$charLength = count($array) - 1;
$chatNumber = array();
$iTemp = 0;
foreach ($array as $temp) {
$chatNumber[$temp] = $iTemp;
$iTemp++;
}
$i = 0;
$maxValueNumber = count($valueArray);
$add = false;
foreach ($valueArray as $temp) {
if (isset($chatNumber[$temp]) == false) {
$i++;
continue;
}
if ($add == true) {
if ($temp == $array[$charLength]) {
$valueArray[$i] = $array[0];
$i++;
if ($i == $maxValueNumber) {
$valueArray[$maxValueNumber] = $array[0];
}
continue;
}
$valueArray[$i] = $array[$chatNumber[$temp] + 1];
break;
}
if ($temp == $array[$charLength]) {
$add = true;
$valueArray[$i] = $array[0];
$i++;
if ($i == $maxValueNumber) {
$valueArray[$maxValueNumber] = $array[0];
}
continue;
}
$valueArray[$i] = $array[$chatNumber[$temp] + 1];
break;
}
if ($Length != null && $Length < count($valueArray)) {
$valueArray[$i] = "";
}
$result = "";
$valueArray = array_reverse($valueArray);
foreach ($valueArray as $temp) {
$result .= $temp;
}
return $result;
}
至于输出结果,自己去测试测试吧
希望能够帮到你
希望你能够点赞
希望你能够收藏