@@ -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