2013-02-16 2 views
0

Я использовал некоторые коды, чтобы ограничить отображение символов из абзаца во время цикла.Мой сценарий использует больше памяти для запуска

Это мой код:

//mysqli_stmt_fetch ($stmt);  
while (mysqli_stmt_fetch($stmt)) { 

     $position=70; // Define how many characters you want to display.  
     // Find what is the last character. 
     $subject = substr($subjects,$position,1); 

     if($subject !=" "){ 
     while($subject !=" "){ 
      $i=1; 
      $position=$position+$i; 
      $subject = substr($subjects,$position,1); 
     } 
     }  
     $subject = substr($subjects,0,$position); 

     echo '<h4><span>Subjects/</span>'.$subject.'.....</h4>'; 
} 

Моя проблема при запуске этого сценария это займет много времени, чтобы работать. Если я уменьшу значение $ position, то быстро выполнив скрипт, и если я увеличу значение $ position, это займет много времени.

если его $position=80 Я не могу заставить его работать. На самом деле его вовсе не исполнилось. Мой Диспетчер задач Windows показывает, что он использует физическую память 100%.

Может ли кто-нибудь сказать мне, в чем причина этого?

спасибо.

+1

Похоже, бесконечный цикл. Вы можете просто подсчитать количество пробелов, возможно, после 'trim ($ subject)', затем подстроку после выделения или добавление количества пробелов (добавление, возможно). –

+0

Можете ли вы показать мне это на примере? Спасибо – TNK

+0

Вы должны проверить ($ subject! == false) –

ответ

3

Если я правильно понял, вы хотите вернуть первые 70 символов строки, но отключите его при первом символе пробела.

Вы могли бы использовать это:

function get_snippet($subject, $count) { 

    // if string length is already under the desired char count 
    if (strlen($subject) <= $count) return $subject; 

    // find first space char after desired position 
    $pos = strpos($subject, ' ', $count); 

    if ($pos === false) return $subject; // no space, must be end of the string so return entire text 
    else return substr($subject, 0, $pos) . '...'; // return all chars up to first space 
} 

Назвав его:

$newtext = get_snippet($subjects, 70); 
+0

Если '$ pos === false', может быть разумным вернуть только часть до последнего места перед точкой отсечки. – DCoder

+0

Не помещайте объявление функции внутри цикла ... –

+0

@TharangaNuwan Да, я отредактировал код, чтобы вернуть «...», когда текст отключен. –

Смежные вопросы