3v4l.org

run code in 300+ PHP versions simultaneously
<?php $text = <<<TEXT Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec placerat libero id mi facilisis, at sagittis tortor porta. Donec eget sodales ipsum. Donec sagittis lacus mauris, et efficitur quam porttitor eu. Fusce eget consequat purus. Maecenas rutrum arcu viverra est rhoncus, et hendrerit tellus elementum. Aenean ornare dolor tempus ante porta, sit amet convallis lacus rutrum. Maecenas bibendum magna tortor. Vestibulum tortor nunc, dictum vitae nisl quis, pharetra mattis massa. Vestibulum vulputate leo eros, eget maximus ipsum tristique quis. Quisque rutrum vel felis eget feugiat. Etiam interdum nisi ac nibh egestas malesuada. Mauris fringilla nisi id rutrum fermentum. Ut ultrices ipsum rutrum, hendrerit urna non, dapibus ligula. Vivamus rhoncus eros eget eros feugiat volutpat. In ac arcu at purus porta varius. Sed commodo diam a ipsum vestibulum, et sagittis sem consectetur. TEXT; $needles = [ 'efficitur', 'eget', 'Ipsum', ]; array_multisort( array_map('strlen', $needles), SORT_DESC, $needles ); $pattern = '#\b(?>' . implode('|', array_map('preg_quote', $needles)) . ')\b#i'; if (preg_match_all($pattern, $text, $m, PREG_OFFSET_CAPTURE)) { $narrowestWordOffsets = []; $fullSetCount = null; $totalLength = null; foreach ($m[0] as $i => [$w, $o]) { $set = [$w => $o]; foreach (array_slice($m[0], $i + 1) as [$w2, $o2]) { if (!isset($set[$w2])) { $set[$w2] = $o2; $lastWord = $w2; } } $setLength = strlen($lastWord) + $set[$lastWord] - current($set); if ( !$narrowestWordOffsets || ( $setLength < $totalLength && count($set) === $fullSetCount ) ) { $narrowestWordOffsets = $set; $totalLength = $setLength; $fullSetCount ??= count($set); } } var_export( preg_replace_callback( '#(.*?)([^.]*' . preg_quote(substr($text, current($narrowestWordOffsets), $totalLength)) . '[^.]*\.?)(.*)#', fn($m) => (strlen($m[1]) ? '...' : '') . $m[2] . (strlen($m[3]) ? ' ...' : ''), $text ) ); } else { echo 'No needles found in haystack'; }
Output for 7.4.0 - 7.4.33, 8.0.1 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.28, 8.4.1 - 8.4.14, 8.5.0 - 8.5.1
'... Donec eget sodales ipsum. Donec sagittis lacus mauris, et efficitur quam porttitor eu. ...'
Output for 8.4.15
/bin/php-8.4.15: /usr/lib/libm.so.6: version `GLIBC_2.38' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libm.so.6: version `GLIBC_2.35' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libc.so.6: version `GLIBC_2.34' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libc.so.6: version `GLIBC_2.38' not found (required by /bin/php-8.4.15)
Process exited with code 1.

preferences:
133.88 ms | 407 KiB | 5 Q