我正在为我的网站编写一个函数来旋转数字,并不断扩展它。我添加了额外的字符,定义百分比的偏移的能力,以及要影响的字符类型。
<?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 :-)