Gunnar Bittersmann: Code kürzen?

Beitrag lesen

@@Der Martin:

nuqneH

Hallo Ingrid,

Ja? ;-)

$start = strpos($text, $startseq);

$end   = strpos($text, $endseq);

  
Äh, nö. Zweimal mit String^WByteoperation über einen String gehen ist vielleicht auch nicht performanter als dies einmal mit einem regulären Ausdruck zu tun.  
  
Und muss auch nicht sein: Nach `$endseq`{:.language-php} muss man ja nur hinter dem Vorkommen von `$startseq`{:.language-php} suchen (und das auch nur, wenn es wirklich vorkommt). `[link:http://www.php.net/manual/de/function.strpos.php@title=strpos()]`{:.language-php} kennt dazu einen optionalen dritten Parameter.  
  
~~~php
$start = strpos($text, $startseq);  
  
if ($start !== false)  
{  
  $start += strlen($startseq);  
  $end = strpos($text, $endseq, $start);  
}  
else  
{  
  $end = false;  
}

Damit kann man sich

if ($start===false              // start sequence not found

|| $end===false                // end sequence not found
|| $end<$start)                // end sequence found before start sequence

  
auch sparen:  
  
~~~php
if ($end === false)  
{  
  echo 'Section not found';  
}  
else  
{  
  echo htmlspecialchars(trim(substr($text, $start, $end-$start)));  
}

Qapla'

--
„Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)