我正在寻找一种方法将字符串向左旋转 N 次。以下是一些示例:
假设字符串是 abcdef
- 如果我旋转它
1
次,我希望得到bcdefa
- 如果我旋转它
2
次,我希望得到cdefab
- 如果我旋转它
3
次,我希望得到defabc
- ...
- ...
- 如果我将字符串旋转其长度次数,应该会返回原始字符串。
$rotated = substr($str, $n) . substr($str, 0, $n);
这里有一种变体,允许任意向左和向右移位,而不受输入字符串长度的限制:
function str_shift($str, $len) {
$len = $len % strlen($str);
return substr($str, $len) . substr($str, 0, $len);
}
echo str_shift('abcdef', -2); // efabcd
echo str_shift('abcdef', 2); // cdefab
echo str_shift('abcdef', 11); // fabcde
function rotate_string ($str, $n)
{
while ($n > 0)
{
$str = substr($str, 1) . substr($str, 0, 1);
$n--;
}
return $str;
}
虽然没有标准函数,但很容易实现。
function rotate_left($s) {
return substr($s, 1) . $s[0];
}
function rotate_right($s) {
return substr($s, -1) . substr($s, 0, -1);
}
你可以扩展这个函数,添加一个可选参数来指定旋转的字符数。
function rotate_string($str) {
for ($i=1; $i<strlen($str)+1;$i++) {
@$string .= substr($str , strlen($str)-$i , 1);
}
return $string;
}
echo rotate_string("string"); //gnirts
<?php
$str = "helloworld" ;
$res = string_function($str,3) ;
print_r ( $res) ;
function string_function ( $str , $count )
{
$arr = str_split ( $str );
for ( $i=0; $i<$count ; $i++ )
{
$element = array_pop ( $arr ) ;
array_unshift ( $arr, $element ) ;
}
$result=( implode ( "",$arr )) ;
return $result;
}
?>
你也可以像这样获取N个旋转字符串。
$str = "Vijaysinh";
$arr1 = str_split($str);
$rotated = array();
$i=0;
foreach($arr1 as $a){
$t = $arr1[$i];
unset($arr1[$i]);
$rotated[] = $t.implode($arr1);
$arr1[$i] = $t;
$i++;
}
echo "<pre>";print_r($rotated);exit;
$n
大于字符串长度,那么这样做是行不通的,对吧? - Svish