php $ string内存泄漏

时间:2015-01-21 02:52:03

标签: php memory-leaks

就像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");

2 个答案:

答案 0 :(得分:1)

你的代码在性能方面非常糟糕,试试这个

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");

答案 1 :(得分:0)

你的问题可能是由于这个:

for($reverse = $pos--; $reverse > $stringEnd; $reverse--){ 

更准确地说:

$reverse = $pos--;

更准确地说:

$pos--;

导致递归循环,导致$ string变得大于内存量

我会做这样的事情,但我不确定你要做什么。 expample输出会有所帮助。

代码未经测试

如果您想要翻转单词,请执行此操作。

如果你想反转每个角色......&lt;&lt; \ br&gt;

替换

$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;
}