3v4l.org

run code in 300+ PHP versions simultaneously
<?php $tests = [ ['this is a test', 'This Is a Test', false], ['why sunless tanning is A hot trend', 'Why Sunless Tanning Is a Hot Trend', false], ['Satin Sheets are a Luxury you Can Afford', 'Satin Sheets Are a Luxury You Can Afford', false], ['the Dangers Of Hiking Without Proper Shoes', 'The Dangers of Hiking Without Proper Shoes', false], ['an hour or so', 'An Hour or So', false], ['Of the meaning Of Of', 'Of the Meaning of Of', false], ['Thing With Extra Spaces', 'Thing With Extra Spaces', false], ['Thing with extra spaces', 'Thing With Extra Spaces', true], ['Observations of isolated pulsars and disk-fed X-ray binaries.', 'Observations of Isolated Pulsars and Disk-Fed X-Ray Binaries.', false] ]; function APATitle($title, $keepMultipleSpaces = false, $blackList = []) { if (!is_string($title)) { return false; } $blackList = $blackList ? array_map('strtolower', (array)$blackList) : ['a', 'an', 'and', 'at', 'but', 'by', 'for', 'in', 'nor', 'of', 'on', 'or', 'so', 'the', 'to', 'up', 'yet']; if (!$keepMultipleSpaces) { $title = preg_replace('~\s+~', ' ', $title); } return preg_replace_callback( '~(?!^)\b(?:' . implode('|', $blackList) . ')\b(?!$)(*SKIP)(*FAIL)|\b[a-z]+\b~', function ($m) { return ucfirst($m[0]); }, strtolower($title) ); } foreach ($tests as [$input, $expectedOutput, $keepMultipleSpaces]) { $output = APATitle($input, $keepMultipleSpaces); echo ($output === $expectedOutput ? 'SUCCESS' : 'FAILURE') . ":\t\"{$input}\" became \"{$output}\"\n"; }

preferences:
57.9 ms | 402 KiB | 5 Q