我正在为我的网站编写一个函数,也用于旋转数字,并不断扩展它。我添加了额外的字符、定义百分比偏移量以及要影响的字符类型的能力。
<?php
function str_shift ($string, $perc=50, $useextra=FALSE, $usedigits=TRUE, $useupper=TRUE, $uselower=TRUE) {
static $chars = array(
'lower' => 'abcdefghijklmnopqrstuvwxyz',
'upper' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'digits' => '0123456789',
'extra' => ',.-()<>%/!"&=;:_[]{}#\\?\'+*',
);
settype($perc, 'float');
if (!$perc) return $string;
$perc = fmod((abs($perc) < 1 ? 100*$perc : $perc), 100);
if ($perc < 0) $perc += 100;
$use = (is_array($useextra) ? $useextra : array('lower'=>$uselower, 'upper'=>$useupper, 'digits'=>$usedigits, 'extra'=>$useextra));
foreach ($chars as $type => $letters) {
if (!$use[$type]) continue;
$shift = round(strlen($letters) * $perc / 100);
$repl = substr($letters, $shift).substr($letters, 0, $shift);
$string = strtr($string, $letters, $repl);
}
return $string;
}
string str_shift ( string $str [, float $percent [, bool $useextra [, bool $usedigits [, bool $uselower [, bool $useupper] ] ] ] ] )
string str_shift ( string $str [, float $percent [, array $usetypes ] ] )
$usetypes = array('lower'=>bool $uselower, 'upper'=>bool $useupper, 'digits'=>bool $usedigits, 'extra'=>bool $useextra);
$string = "Peter's 17 pets (incl. 5 hamsters) love Dr Sarah Gibson, DVM!";
echo str_shift($string);
echo str_shift($string, 50, TRUE);
echo str_shift($string, -25, FALSE, FALSE);
echo str_shift($string, 1/3);
echo str_shift($string, 50, array('lower'=>TRUE, 'digits'=>TRUE));
?>
//===== 结果 =====
Crgre'f 62 crgf (vapy. 0 unzfgref) ybir Qe Fnenu Tvofba, QIZ!
Crgre"f 62 crgf [vapy: 0 unzfgref] ybir Qe Fnenu Tvofba; QIZ?
Jynyl'm 17 jynm (chwf. 5 bugmnylm) fipy Xl Mulub Acvmih, XPG!
Yncna'b 40 yncb (rwlu. 8 qjvbcnab) uxen Ma Bjajq Prkbxw, MEV!
Prgre'f 62 crgf (vapy. 0 unzfgref) ybir De Snenu Gvofba, DVM!
1. 基本参数是字符串和百分比,默认为 50。接下来的四个参数允许选择要处理的字符类型。我将不太常用的类型放在前面,最明显的类型放在最后面是有充分理由的。要激活额外字符,您只需要 1 个额外的参数,否则您将需要 4 个参数来启用明显的类型。
2. 字母和数字的定义很明显。对于额外字符,我选择了一些在偏移 50% 时有意义的配对,例如 () => [] 或 & => + 等。当然,您可以将这些字符调整为您喜欢的任何内容。
3. 第一步是清理百分比,并允许“真正的”浮点数,例如 1/3 表示 33.33%。
4. 下一步确保在使用该函数时具有很大的灵活性。如前所述,您可以传递 1 个数组,而不是 4 个布尔参数。例如,数组('upper' => TRUE) 将仅启用大写字母的更改。
5. 最后,该函数遍历每种类型,并根据给定的百分比移动字符。
我希望您能够使用此函数并用它做一些花哨的事情。旋转字符本身并没有多大意义,但它可能很有趣。
Arthur :-)