前言
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"; for ($i = 0; $i < 6000; $i++) { $value = NextValue($value, $chars,3); 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; }
打开控制台查看结果
...
部分结果
bab
bac
bba
bbb
bbc
bca
bcb
bcc
caa
cab
...
在此,分享就结束了
希望我写的代码能帮助到大家,别忘记留言哦~