像 20 一样,我不断收到内存泄漏。我确定我只是没有看到问题所在,但希望有新鲜眼光的人可以告诉我哪里出了问题。
--在作品内部,假设取一个句子,在每个单词后面用逗号,反转单词而不移动它在句子中的位置。
function bassAckwards($input)
{
//$inputLen = strlen($input);
$stringEnd = 0;
$findme = ',';
$flag1 = true;
$tempOffset = 0;
$string = "";
//Start loop, as long as flag is true
while($flag1 == true){
//find position of next ","
$pos = strpos($input, $findme, $tempOffset);
//If $pos is null end loop and return string.
if($pos == false){
$flag1 = false;
}
else{
//$pos is not null so create inner loop and add to string
for($reverse = $pos--; $reverse > $stringEnd; $reverse--){
$string = $string . substr($input, $reverse); // < ------ TempStr will add in substr, which will be added to $string
}
}
$stringEnd = $pos;
$tempOffset = $pos + 1;
}
return $string;
}
print bassAckwards("Php,Cookies,Arrays,Mysql,LAMP");
你的代码在性能方面非常糟糕,试试这个
function bassAckwards($input)
{
$findme = ',';
$input = explode($findme, $input);
foreach ($input as $i => $word) {
$input[$i] = strrev($word);
}
return implode($findme, $input);
}
print bassAckwards("Php,Cookies,Arrays,Mysql,LAMP");
您的问题可能是由于以下原因:
for($reverse = $pos--; $reverse > $stringEnd; $reverse--){
更准确地说:
$reverse = $pos--;
更准确地说:
$pos--;
导致递归循环,导致$string变得大于内存量。
我会做这样的事情,但我不确定你想做什么。 扩展输出会有所帮助。
代码未经测试
如果你想反转单词,这是。
如果你想反转每个角色...<<''br>
取代
$words = explode(' ',substr($input,$e,$s-$e));
跟
$characters = str_split(substr(($input,$e,$s-$e));
反向例程:
$e = 0;
while(true){
$s = strpos($input, ',', $e);
if ($s){
$words = explode(substr($input,$e,$s-$e));
$words = array_reverse($words);
foreach($words as $val){
$reverseStr .= $val;
}
}
else{
break;
}
$e = $s+1;
}