如何编写一个简短的 PHP 函数来反转字符串?
该功能必须:
strrev()
或array_reverse()
,以及for()
、foreach()
或 while()
。赶紧往下扫,这些看起来好长啊!
function rev($str) {
return $str?rev(substr($str,1)).$str[0]:'';
}
递归显然不适用于长度超过 100 个字符的字符串。
因为这听起来像是家庭作业问题,我会告诉你如何做,但你自己编码。 通过强制转换将字符串转换为数组。然后使用采用用户定义的排序函数的数组排序函数之一。
function reverseString($string) {
return shell_exec(sprintf('ruby -e \'puts "%s".reverse\'', preg_replace("/\"/", "\\\"", $string)));
}
递归解法:
function sr( $txt ){
return $txt[ strlen( $txt ) - 1 ] . ( ( strlen( $txt ) > 1 )?sr( substr( $txt, 0, strlen($txt)-1 ) ):null) ;
}
echo sr( "abc def ghi jklm" );
说明:
return $txt[ strlen( $txt ) - 1 ] // return last byte of string
. // concatenate it with:
(( strlen( $txt ) > 1 ) ? // if there are more bytes in string
sr( substr( $txt, 0, strlen( $txt ) - 1 ) // then with reversed string without last letter
: null ); // otherwise with null
为了使其适用于零长度字符串,添加了另一个条件表达式:
return (strlen($txt))? ($txt[ strlen( $txt ) - 1 ] . ( ( strlen( $txt ) > 1 )?sr( substr( $txt, 0, strlen($txt)-1 ) ):null)):"" ;
<?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`enter code here`
满足您的所有要求,但仅适用于 PHP 5.3 或更高版本。让它对其他人起作用是家庭作业。
function reverse($str) {
$i=0;
$j=strlen($str)-1;
start:
if($i>=$j) {
goto done;
}
$tmp = $str[$j];
$str[$j--] = $str[$i];
$str[$i++] = $tmp;
goto start;
done:
return $str;
}
function reverse_string($string) {
if($string !== '')
return substr($string, -1).reverse_string(substr($string, 0, strlen($string)-2));
}
递归解决方案。感觉就像你的老师正在寻找的那样。
function my_strrev ($str) {
$length = strlen($str);
switch ($length) {
case 0: return '';
case 1: return $str; break;
case 2: return $str[1] . $str[0];
default :
return $str[$length-1] . my_strrev(substr($str,1,-1)) . $str[0];
break;
}
}
它交换第一个和最后一个字母,并且与字符串的其余部分相同。
更新: 受到 mateusza 的启发,我创建了另一个解决方案(很有趣;))
function my_strrev2 ($str) {
return $str
? my_strrev2(substr($str, 1)) . $str[0]
: '';
}
它的工作方式与 mateuszas 类似,但它附加第一个字符,而不是添加最后一个字符。
在 PHP 中不使用任何函数:
$String = "Hello World";
$i = 0;
// Find the end of the string
while (isset($String[$i])) {
$i++;
}
// Decrement $i to point to the last character
$i--;
// Build the reversed string
while ($i >= 0) {
$reversed .= $String[$i];
$i--;
}
echo "Reversed :- $reversed" ;
为了避免递归的字符串长度限制,您可以对非黑名单函数使用三个步骤。
代码:(演示)
function revStr(string $str): string
{
$str = str_split($str);
krsort($str);
return implode($str);
}
echo revStr('SnackOverflow'); // wolfrevOkcanS
作为 IIFE:
echo (
function($str) {
$str = str_split($str);
krsort($str);
return implode($str);
}
)('SnackOverflow');
我的答案是OOP并使用递归。自行处理递归限制。
class StringReverser
{
public $reversed_string;
public function __construct ($string) {
$original_recursion_limit = ini_get('pcre.recursion_limit');
$array = str_split($string);
krsort($array);
$i = strlen($string);
ini_set('pcre.recursion_limit', $i+1);
$this->add2string($string, $i, $array);
ini_set('pcre.recursion_limit', $original_recursion_limit);
}
public function reverse() {
return $this->reversed_string;
}
private function add2string ($s, $i, $a) {
if($i) {
$i--;
$this->reversed_string .= $a[$i];
$this->add2string($s, $i,$a, $this->reversed_string);
}
}
}
$string = "Elzo Valugi";
echo $string ."<br>";
$reverser = new StringReverser($string);
echo $reverser->reverse();
<?php
$string="jomon is name my";
for($i=strlen($string);$i>=0;$i--)
{
$char.=$string{$i};
}
echo $char."<br/>";
for($i=0; $i<strlen($char);$i++)
{
if($char[$i+1]==" " || $char[$i+1]=="")
{
for($temp=$i; $temp>=0 && $char[$temp]!=' '; $temp--)
echo $char[$temp];
}
echo " ";
}
?>