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 git.master, git.master_jit, rfc.property-hooks
'... Donec eget sodales ipsum. Donec sagittis lacus mauris, et efficitur quam porttitor eu. ...'

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
32.8 ms | 405 KiB | 5 Q