使用PHP反转字符串

4
我正在尝试找到一种反转字符串的方法。虽然我看过其他方法,但我希望通过独立思考并不使用任何其他人的代码来完成这个任务。以下代码可以将字符串反转,但是我一直收到如下错误提示:
注意:C:\wamp\www\test\index.php第15行中未定义偏移量:25。
其中25是被递减的字符串长度。
//error_reporting(NULL);
$string = trim("This is a reversed string");

//find length of string including whitespace
$len =strlen($string);

//slipt sting into an array
$stringExp = str_split($string);

//deincriment string and echo out in reverse
for ($i = $len; $i >=0;$i--)
{
echo $stringExp[$i];
}

感谢您提前答复。

你的字符串索引从0开始,因此第25个字符的索引为24。更改你的代码,使$i从24到0。正如下面许多海报所回答的那样,你还应该在PHP函数库中寻找需要的功能。 - Gustav Bertram
谢谢,我发现0被计算为1,是的,有库可以做到这一点,但我想尝试不使用它们来实现。;-) - Steven Mcsorley
我在这里为你的问题添加了一个答案,https://dev59.com/yk7Sa4cB1Zd3GeqP1zxx#30722030。如有需要,请随意进行调整。谢谢。 - Louie Miranda
16个回答

8
你正在尽力而为,但在重复造轮子之前,请始终参考手册和/或搜索引擎,以检查是否有本地函数可以实现您想要的功能。 strrev — 反转字符串。 http://php.net/manual/en/function.strrev.php
$string = "This is a reversed string";
echo strrev($string);
// Output: gnirts desrever a si sihT

1
使用strrev反转UTF8字符串时要小心!请参考此答案 - mixable

4

如其他人所说,可以使用 strrev() 来进行这个操作。

如果你想自己编写代码(为了学习?):你的问题在于从索引1开始的位置太高了 - 长度为25的字符串的索引从0到24,因此你的循环应该像这样:

for ($i = $len - 1; $i >=0;$i--)
{
   echo $stringExp[$i];
}

谢谢,那就是我错了,忘记了它计算0,所以当减少长度时,它在寻找25,但实际上并不存在。是的,我知道strrev可用,但我试图不依赖预构建的函数来完成它。你救了我一命,避免了头痛 :-) - Steven Mcsorley

4
$string = 'mystring';
$length = strlen($string);

for ($i = $length; $i > 0; $i--){
echo $string[$i-1];
}

OUTPUT: gnirtsym

2

必须得到$len-1,因为字符串从0开始到$len-1


1
echo strrev("This is a reversed string!"); 

1

PHP的字符串函数十分完整,你只需要传递字符串就可以了。这也是PHP易于使用的原因 :)

使用strrev PHP函数http://bg2.php.net/manual/en/function.strrev.php

<?php
  echo strrev("This is a reversed string");
 ?>

// Output: gnirts desrever a si sihT

谢谢。是的,strrev 是简单的方法,但我正在尝试按照方法论来解决它(即长方法)。这是为了我今天的面试。 - Steven Mcsorley

1

这里有一个函数可以实现这个功能strrev


1
<?php
// Reversed string and Number
//  For Example :
    $str = "hello world. This is john duvey";
    $number = 123456789;
    $newStr = strrev($str);
    $newBum = strrev($number);

    echo $newStr;
    echo "<br />";
    echo $newBum;

OUTPUT : 
 first : yevud nhoj si sihT .dlrow olleh
 second: 987654321

0
for ($i = $len-1; $i >=0;$i--)
{
  echo $stringExp[$i];
}

由于索引从0开始


0

将您的for循环更改为

for ($i = $len-1; $i >=0;$i--)
{
echo $stringExp[$i];
}

正如oezi所提到的,这正是我在寻找的,因为有24个数组键而不是25个,谢谢。 - Steven Mcsorley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接