3v4l.org

run code in 300+ PHP versions simultaneously
<?php function truncateGumbo($string, $chars = 50, $terminator = ' …') { $cutPos = $chars - mb_strlen($terminator); $boundaryPos = mb_strrpos(mb_substr($string, 0, mb_strpos($string, ' ', $cutPos)), ' '); return mb_substr($string, 0, $boundaryPos === false ? $cutPos : $boundaryPos) . $terminator; } function truncateGordon($string, $chars = 50, $terminator = ' …') { return mb_strimwidth($string, 0, $chars, $terminator); } function truncateSoapBox($string, $chars = 50, $terminate = ' …') { $chars -= mb_strlen($terminate); if ( $chars <= 0 ) return $terminate; $string = mb_substr($string, 0, $chars); $space = mb_strrpos($string, ' '); if ($space < mb_strlen($string) / 2) return $string . $terminate; else return mb_substr($string, 0, $space) . $terminate; } function truncateMickmackusa($string, $max = 50, $terminator = ' …') { $trunc = $max - mb_strlen($terminator, 'UTF-8'); return preg_replace("~(?=.{{$max}})(?:\S{{$trunc}}|.{0,$trunc}(?=\s))\K.+~us", $terminator, $string); } $tests = [ [ 'testCase' => "Answer to the Ultimate Question of Life, the Universe, and Everything.", // 50th char ---------------------------------------------------^ 'expected' => "Answer to the Ultimate Question of Life, the …", ], [ 'testCase' => "A single line of text to be followed by another\nline of text", // 50th char ----------------------------------------------------^ 'expected' => "A single line of text to be followed by another …", ], [ 'testCase' => "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝ", // 50th char ---------------------------------------------------^ 'expected' => "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ …", ], [ 'testCase' => "123456789 123456789 123456789 123456789 123456789", // 50th char doesn't exist -------------------------------------^ 'expected' => "1234567890123456789012345678901234567890123456789", ], [ 'testCase' => "Hello worldly world", // 50th char doesn't exist -------------------------------------^ 'expected' => "Hello worldly world", ], [ 'testCase' => "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ1234567890", // 50th char ---------------------------------------------------^ 'expected' => "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV …", ], ]; foreach ($tests as ['testCase' => $testCase, 'expected' => $expected]) { echo "\tSample Input:\t\t$testCase\n"; echo "\n\ttruncateGumbo:\t\t" , truncateGumbo($testCase); echo "\n\ttruncateGordon:\t\t" , truncateGordon($testCase); echo "\n\ttruncateSoapBox:\t" , truncateSoapBox($testCase); echo "\n\ttruncateMickmackusa:\t" , truncateMickmackusa($testCase); echo "\n\tExpected Result:\t{$expected}"; echo "\n-----------------------------------------------------\n"; }
Output for 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.19, 8.3.0 - 8.3.4, 8.3.6 - 8.3.7
Sample Input: Answer to the Ultimate Question of Life, the Universe, and Everything. truncateGumbo: Answer to the Ultimate Question of Life, the … truncateGordon: Answer to the Ultimate Question of Life, the Uni … truncateSoapBox: Answer to the Ultimate Question of Life, the … truncateMickmackusa: Answer to the Ultimate Question of Life, the … Expected Result: Answer to the Ultimate Question of Life, the … ----------------------------------------------------- Sample Input: A single line of text to be followed by another line of text truncateGumbo: A single line of text to be followed by … truncateGordon: A single line of text to be followed by another … truncateSoapBox: A single line of text to be followed by … truncateMickmackusa: A single line of text to be followed by another … Expected Result: A single line of text to be followed by another … ----------------------------------------------------- Sample Input: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝ truncateGumbo: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ … truncateGordon: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ … truncateSoapBox: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ … truncateMickmackusa: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ … Expected Result: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ … ----------------------------------------------------- Sample Input: 123456789 123456789 123456789 123456789 123456789 truncateGumbo: 123456789 123456789 123456789 123456789 12345678 … truncateGordon: 123456789 123456789 123456789 123456789 123456789 truncateSoapBox: 123456789 123456789 123456789 123456789 … truncateMickmackusa: 123456789 123456789 123456789 123456789 123456789 Expected Result: 1234567890123456789012345678901234567890123456789 ----------------------------------------------------- Sample Input: Hello worldly world truncateGumbo: Fatal error: Uncaught ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack) in /in/ijGiR:4 Stack trace: #0 /in/ijGiR(4): mb_strpos('Hello worldly w...', ' ', 48) #1 /in/ijGiR(68): truncateGumbo('Hello worldly w...') #2 {main} thrown in /in/ijGiR on line 4
Process exited with code 255.
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 Sample Input: Answer to the Ultimate Question of Life, the Universe, and Everything. truncateGumbo: Answer to the Ultimate Question of Life, the … truncateGordon: Answer to the Ultimate Question of Life, the Uni … truncateSoapBox: Answer to the Ultimate Question of Life, the … truncateMickmackusa: Answer to the Ultimate Question of Life, the … Expected Result: Answer to the Ultimate Question of Life, the … ----------------------------------------------------- Sample Input: A single line of text to be followed by another line of text truncateGumbo: A single line of text to be followed by … truncateGordon: A single line of text to be followed by another … truncateSoapBox: A single line of text to be followed by … truncateMickmackusa: A single line of text to be followed by another … Expected Result: A single line of text to be followed by another … ----------------------------------------------------- Sample Input: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝ truncateGumbo: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ … truncateGordon: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ … truncateSoapBox: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ … truncateMickmackusa: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ … Expected Result: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ … ----------------------------------------------------- Sample Input: 123456789 123456789 123456789 123456789 123456789 truncateGumbo: 123456789 123456789 123456789 123456789 12345678 … truncateGordon: 123456789 123456789 123456789 123456789 123456789 truncateSoapBox: 123456789 123456789 123456789 123456789 … truncateMickmackusa: 123456789 123456789 123456789 123456789 123456789 Expected Result: 1234567890123456789012345678901234567890123456789 ----------------------------------------------------- Sample Input: Hello worldly world truncateGumbo: Fatal error: Uncaught ValueError: mb_strpos(): Argument #3 ($offset) must be contained in argument #1 ($haystack) in /in/ijGiR:4 Stack trace: #0 /in/ijGiR(4): mb_strpos('Hello worldly w...', ' ', 48) #1 /in/ijGiR(68): truncateGumbo('Hello worldly w...') #2 {main} thrown in /in/ijGiR on line 4
Process exited with code 255.
Output for 7.1.0 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33
Sample Input: Answer to the Ultimate Question of Life, the Universe, and Everything. truncateGumbo: Answer to the Ultimate Question of Life, the … truncateGordon: Answer to the Ultimate Question of Life, the Uni … truncateSoapBox: Answer to the Ultimate Question of Life, the … truncateMickmackusa: Answer to the Ultimate Question of Life, the … Expected Result: Answer to the Ultimate Question of Life, the … ----------------------------------------------------- Sample Input: A single line of text to be followed by another line of text truncateGumbo: A single line of text to be followed by … truncateGordon: A single line of text to be followed by another … truncateSoapBox: A single line of text to be followed by … truncateMickmackusa: A single line of text to be followed by another … Expected Result: A single line of text to be followed by another … ----------------------------------------------------- Sample Input: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝ truncateGumbo: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ … truncateGordon: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ … truncateSoapBox: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ … truncateMickmackusa: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ … Expected Result: âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ … ----------------------------------------------------- Sample Input: 123456789 123456789 123456789 123456789 123456789 truncateGumbo: 123456789 123456789 123456789 123456789 12345678 … truncateGordon: 123456789 123456789 123456789 123456789 123456789 truncateSoapBox: 123456789 123456789 123456789 123456789 … truncateMickmackusa: 123456789 123456789 123456789 123456789 123456789 Expected Result: 1234567890123456789012345678901234567890123456789 ----------------------------------------------------- Sample Input: Hello worldly world truncateGumbo: Warning: mb_strpos(): Offset not contained in string in /in/ijGiR on line 4 Hello worldly world … truncateGordon: Hello worldly world truncateSoapBox: Hello worldly … truncateMickmackusa: Hello worldly world Expected Result: Hello worldly world ----------------------------------------------------- Sample Input: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ1234567890 truncateGumbo: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV … truncateGordon: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV … truncateSoapBox: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV … truncateMickmackusa: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV … Expected Result: abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV … -----------------------------------------------------

preferences:
143.59 ms | 410 KiB | 212 Q