汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。
通过PHP字符串截取扩展相关函数
public function leftMoveString($string, $num) {
return substr($string, $num) . substr($string, 0, $number);
}
public function leftMoveString($string, $num) {
$string .= $string;
$length = strlen($string);
return substr($string, $num, $length);
}
substr 返回字符串的子串
string substr(string $string, int $start[, int $length])
//返回字符串string由$start和$length参数指定的子字符串
参数 $start
**1 $start 为非负数,返回的字符串将从$string的$start位置开始,从0开始计算,例如,在字符串"abcdef"中,在位置0的字符串是"a",位置2的字符串是"c"。**
2 $start 为负数,返回的字符串将从$string结尾处向前数第$start个字符开始。
3 如果$string的长度小于$start, 将返回false
<?php
$rest = substr("abcdef", -1); // 返回 "f"
$rest = substr("abcdef", -2); // 返回 "ef"
$rest = substr("abcdef", -3, 1); // 返回 "d"
$rest = substr("abcdef", 0); // 返回 false
?>
length
1 length为正数,返回的字符串将从$start处开始最多包括$length个字符(取决于$string的长度)
2 length为负数,$string末尾处的$length个字符将会被省略,即截取末尾处$length之前的字符串(若$start是负数则从字符串尾部算起)。如果$start不在这段文本中,那么将返回false。
3 length为0,false,null 返回一个空字符串
4 没有提供$length,返回的子字符串将从$start位置开始直到字符串结尾
<?php
$rest = substr("abcdef", 0, -1); // 返回 "abcde"
$rest = substr("abcdef", 2, -1); // 返回 "cde"
$rest = substr("abcdef", 4, -4); // 返回 ""
$rest = substr("abcdef", -3, -1); // 返回 "de"
?>
引申 切割字符串 explode, str_split
str_split — 将字符串转换为数组
说明
array str_split(string $string [, int $split_length = 1])
参数 split_length 每一段的长度
返回值 如果指定了可选的 split_length 参数,返回数组中的每个元素均为一个长度为 split_length 的字符块,否则每个字符块为单个字符。
如果 split_length 小于 1,返回 FALSE。如果 split_length 参数超过了 string 超过了字符串 string 的长度,整个字符串将作为数组仅有的一个元素返回。
<?php
$str = "Hello Friend";
$arr1 = str_split($str);
$arr2 = str_split($str, 3);
print_r($arr1);
print_r($arr2);
//arr1
Array
(
[0] => H
[1] => e
[2] => l
[3] => l
[4] => o
[5] =>
[6] => F
[7] => r
[8] => i
[9] => e
[10] => n
[11] => d
)
//arr2
Array
(
[0] => Hel
[1] => lo
[2] => Fri
[3] => end
)
?>
explode — 使用一个字符串分割另一个字符串
说明
array explode ( string $delimiter , string $string [, int $limit ] )
此函数返回由字符串组成的数组,每个元素都是 string 的一个子串,它们被字符串 delimiter 作为边界点分割出来。
参数 delimiter 边界上的分隔字符
limit
1 limit 为正数,则返回的数组包含最多limit个元素,而最后那个元素将包含string的剩余部分。
2 limit为负数,则返回除了最后的-limit个元素外的所有元素。
3 limit为0,则会被当作1
返回值
此函数返回由字符串组成的 array,每个元素都是 string 的一个子串,它们被字符串 delimiter 作为边界点分割出来。
如果 delimiter 为空字符串(”“),explode() 将返回 FALSE。 如果 delimiter 所包含的值在 string 中找不到,并且使用了负数的 limit , 那么会返回空的 array, 否则返回包含 string 单个元素的数组。
<?php
// 示例 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
// 示例 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
echo $user; // foo
echo $pass; // *
?>
<?php
/* A string that doesn't contain the delimiter will simply return a one-length array of the original string. */
$input1 = "hello";
$input2 = "hello,there";
var_dump( explode( ',', $input1 ) );
var_dump( explode( ',', $input2 ) );
// 以上例程会输出:
array(1)
(
[0] => string(5) "hello"
)
array(2)
(
[0] => string(5) "hello"
[1] => string(5) "there"
)
?>
<?php
$str = 'one|two|three|four';
// 正数的 limit
print_r(explode('|', $str, 2));
// 负数的 limit(自 PHP 5.1 起)
print_r(explode('|', $str, -1));
?>
以上例程会输出:
Array
(
[0] => one
[1] => two|three|four
)
Array
(
[0] => one
[1] => two
[2] => three
)
implode — 将一个一维数组的值转化为字符串
说明
string implode ( string $glue , array $pieces )
string implode ( array $pieces )
用 glue 将一维数组的值连接为一个字符串。
参数 glue 默认为空的字符串。
pieces 你想要转换的数组。
返回值 返回一个字符串,其内容为由 glue 分割开的数组的值。
<?php
$array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array);
echo $comma_separated; // lastname,email,phone
// Empty string when using an empty array:
var_dump(implode('hello', array())); // string(0) ""
?>
chunk_split — 将字符串分割成小块
说明
string chunk_split ( string $body [, int $chunklen = 76 [, string $end = "\r\n" ]] )
使用此函数将字符串分割成小块非常有用。例如将 base64_encode() 的输出转换成符合 RFC 2045 语义的字符串。它会在每 chunklen 个字符后边插入 end。
参数
body 要分割的字符。
chunklen 分割的尺寸。
end 行尾序列符号。
返回值
返回分割后的字符。
<?php
$str = "Shanghai";
echo chunk_split($str,1,"."); // S.h.a.n.g.h.a.i.
?>