学习PHP中的字符串操作函数(一)
接下来的文章又是我们熟悉的内容了,也就是在 PHP 中关于字符串的操作相关的函数。相信不少函数都是大家每天都要接触的内容,不过也有一些函数可能并不是大家常见的,这里依然还是以学习了解为主。对于我们熟悉的内容,我们深入的看一下它的一些不太常用或者我们没有太注意过的参数,而对于不熟悉的内容,就来看看它的用法是怎样的,有什么好玩的地方。
PHP 中的字符串操作函数非常多,同时,还有一个非常大的问题,也是被很多人所诟病的问题,那就是 PHP 中的函数命名方式。比如有 str_replace() 这样下划线的,有 strstr() 这样啥都没有分隔的,这就让我们的记忆成本高了许多。而我们的文章也不是从单个的某个功能点出发,而是从这些命名格式来出发。比如我们今天这篇文章学习的是 strXXX 这些相关的函数,下篇文章学习 str_xxx 相关的以及带 _ 分割的一些字符串函数,最后一篇文章再学习其它剩下的函数。
好了,话不多说,我们直接进入主题吧。
替换字符串
首先就是我们非常常用的替换字符串。一说到这个,大家肯定第一个想到的就是 str_replace() ,但这个函数并不是我们今天的主题,在下篇文章中再讲它,今天我们要来学习的是其它的替换字符串功能的函数。
$str = "abcdefGHIjklMnOpQRSTUVWXYZabcdefGHIjklMnOpQRSTUVWXYZ";
// 替换1
echo strtr($str, 'abc', 'cba'), PHP_EOL; // cbadefGHIjklMnOpQRSTUVWXYZcbadefGHIjklMnOpQRSTUVWXYZ
$helloStr = "hi all, I said hello";
echo strtr($helloStr, ["hello" => "hi", "hi" => "hello"]), PHP_EOL; // hello all, I said hi
echo str_replace(["hello", "hi"], ["hi", "hello"], $helloStr), PHP_EOL; // hello all, I said hello
strtr() 函数不知道大家有没有使用过。上面我们展示了它的替换操作的能力,也对比了和 str_replace() 的区别。大家能看出来区别所在吗?
对于单个字符串的替换来说,它和 str_replace() 的区别不大,可能比较明显的区别就是参数位置的不同而已。但在进行数组批量替换时,我们就能发现它们两个的显著的区别。对于字符串中的 hi 和 hello 来说,str_replace() 在这其中的效果是首先将 hello 替换成 hi ,然后数组中第二个又将 hi 替换成 hello ,最后的结果是字符串中只包含有 hello 。而 strtr() 则是以位移的形式来转换字符串,当第一个 hello 替换为 hi 的操作完成后,第二个 hi 替换 hello 的操作不会影响之前替换的结果,也就是像代码演示中的效果,我们原始字符串中的 hi 和 hello 调换了一个位置。
是不是感觉突然发现新大陆了,第一个函数就很有意思吧。
获取字符串
// 获取字符串
echo strtok($str, 'c'), PHP_EOL; // ab
echo strtok($str, 'H'), PHP_EOL; // abcdefG
echo strstr($str, "Mn"), PHP_EOL; // MnOpQRSTUVWXYZabcdefGHIjklMnOpQRSTUVWXYZ
echo