如何将PHP中字符串的字符移动5个空格?
所以说:
A变为F
B变成G
Z成为E
与符号相同:
!@#$%^& *()_ +
好的!变成^
%变为)
等等。
无论如何要做到这一点?
答案 0 :(得分:3)
其他答案使用ASCII表(这很好),但我的印象并不是你想要的。这个利用了PHP访问字符串字符的能力,好像字符串本身就是一个数组,允许你拥有自己的字符顺序。
首先,您定义字典:
// for simplicity, we'll only use upper-case letters in the example
$dictionary = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
然后你浏览输入字符串的字符并用字典中的$position + 5
替换每个字符:
$input_string = 'STRING';
$output_string = '';
$dictionary_length = strlen($dictionary);
for ($i = 0, $length = strlen($input_string); $i < $length; $i++)
{
$position = strpos($dictionary, $input_string[$i]) + 5;
// if the searched character is at the end of $dictionary,
// re-start counting positions from 0
if ($position > $dictionary_length)
{
$position = $position - $dictionary_length;
}
$output_string .= $dictionary[$position];
}
$output_string
现在将包含您想要的结果。
当然,如果$input_string
中不存在来自$dictionary
的字符,它将始终作为第5个字典字符结束,但您需要定义一个合适的字典并解决边缘问题例。
答案 1 :(得分:2)
这样的事情应该有效:
<?php
$newString = '';
foreach (str_split('test') as $character) {
$newString .= chr(ord($character) + 5);
}
echo $newString;
请注意,迭代字符串的方法不止一种。
答案 2 :(得分:2)
迭代字符,获取每个字符的ascii值,并获得ascii代码的char值,移动5:
function str_shift_chars_by_5_spaces($a) {
for( $i = 0; $i < strlen($a); $i++ ) {
$b .= chr(ord($a[$i])+5);};
}
return $b;
}
echo str_shift_chars_by_5_spaces("abc");
打印“fgh”
答案 3 :(得分:1)
PHP有这个功能;它被称为strtr()
:
$shifted = strtr( $string,
"ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"FGHIJKLMNOPQRSTUVWXYZABCDE" );
当然,您可以同时使用小写字母和数字甚至符号:
$shifted = strtr( $string,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()_+",
"FGHIJKLMNOPQRSTUVWXYZABCDEfghijklmnopqrstuvwxyzabcde5678901234^&*()_+!@#$%" );
要反转转换,只需将最后两个参数交换为strtr()
。
如果需要动态更改移位距离,可以在运行时构建转换字符串:
$shift = 5;
$from = $to = "";
$sequences = array( "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz",
"0123456789", "!@#$%^&*()_+" );
foreach ( $sequences as $seq ) {
$d = $shift % strlen( $seq ); // wrap around if $shift > length of $seq
$from .= $seq;
$to .= substr($seq, $d) . substr($seq, 0, $d);
}
$shifted = strtr( $string, $from, $to );