утечка памяти в строке php $

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

0

Решение

Ваш код очень плох с точки зрения производительности, попробуйте это

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

Другие решения

Ваша проблема была, вероятно, из-за этого:

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

Точнее это:

$reverse = $pos--;

Еще точнее это:

$pos--;

Вызывает рекурсивный цикл, в результате чего $ string становится больше, чем объем памяти.

Я бы сделал что-то подобное, но я не уверен, что ты пытался сделать. Примерный вывод помог бы.

Код не проверен

Это если вы хотите поменять слова.

Если вы хотите изменить каждый символ …<<\ Ш>

замещать

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

По вопросам рекламы [email protected]