字符串左移

本文介绍PHP中处理字符串的多种方法,包括使用substr进行截取、str_split和explode进行分割、以及implode和chunk_split进行组合。重点讲解如何实现字符串的循环左移功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

汇编语言中有一种移位指令叫做循环左移(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 length0,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.
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值