Skip to content

Commit 489fbab

Browse files
committed
fix: Improve readability excerpt()
1 parent 52617e6 commit 489fbab

File tree

1 file changed

+23
-17
lines changed

1 file changed

+23
-17
lines changed

system/Helpers/text_helper.php

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -711,38 +711,44 @@ function alternator(...$args): string
711711
function excerpt(string $text, ?string $phrase = null, int $radius = 100, string $ellipsis = '...'): string
712712
{
713713
if (isset($phrase)) {
714-
$phrasePos = mb_stripos($text, $phrase);
715-
$phraseLen = mb_strlen($phrase);
714+
$phrasePosition = mb_stripos($text, $phrase);
715+
$phraseLength = mb_strlen($phrase);
716716
} else {
717-
$phrasePos = $radius / 2;
718-
$phraseLen = 1;
717+
$phrasePosition = $radius / 2;
718+
$phraseLength = 1;
719719
}
720720

721-
$pre = explode(' ', mb_substr($text, 0, $phrasePos));
722-
$pos = explode(' ', mb_substr($text, $phrasePos + $phraseLen));
721+
$beforeWords = explode(' ', mb_substr($text, 0, $phrasePosition));
722+
$afterWords = explode(' ', mb_substr($text, $phrasePosition + $phraseLength));
723723

724-
$prev = ' ';
725-
$post = ' ';
724+
$firstPartOutput = ' ';
725+
$endPartOutput = ' ';
726726
$count = 0;
727727

728-
foreach (array_reverse($pre) as $e) {
729-
if ((mb_strlen($e) + $count + 1) < $radius) {
730-
$prev = ' ' . $e . $prev;
728+
foreach (array_reverse($beforeWords) as $beforeWord) {
729+
$beforeWordLength = mb_strlen($beforeWord);
730+
731+
if (($beforeWordLength + $count + 1) < $radius) {
732+
$firstPartOutput = ' ' . $beforeWord . $firstPartOutput;
731733
}
732-
$count = ++$count + mb_strlen($e);
734+
735+
$count = ++$count + $beforeWordLength;
733736
}
734737

735738
$count = 0;
736739

737-
foreach ($pos as $s) {
738-
if ((mb_strlen($s) + $count + 1) < $radius) {
739-
$post .= $s . ' ';
740+
foreach ($afterWords as $afterWord) {
741+
$afterWordLength = mb_strlen($afterWord);
742+
743+
if (($afterWordLength + $count + 1) < $radius) {
744+
$endPartOutput .= $afterWord . ' ';
740745
}
741-
$count = ++$count + mb_strlen($s);
746+
747+
$count = ++$count + $afterWordLength;
742748
}
743749

744750
$ellPre = $phrase !== null ? $ellipsis : '';
745751

746-
return str_replace(' ', ' ', $ellPre . $prev . $phrase . $post . $ellipsis);
752+
return str_replace(' ', ' ', $ellPre . $firstPartOutput . $phrase . $endPartOutput . $ellipsis);
747753
}
748754
}

0 commit comments

Comments
 (0)