3v4l.org

run code in 300+ PHP versions simultaneously
<?php interface StringSearchable { public function search($substring, $buffer); } class BoyerMooreStringSearch implements StringSearchable { public $substring = null; public $buffer = ''; public $jumpTable = array(); protected $results = array(); public function __construct() { } public function __destruct() { } public function search($substring, $buffer) { $this->results = array(); $this->substring = $substring; $this->buffer = $buffer; $this->deriveJumpTable(); $substringLen = strlen($this->substring); $currentCharIndex = $substringLen - 1; $bufferLen = strlen($this->buffer); while ($currentCharIndex < $bufferLen) { for ($i = $substringLen - 1; $i >= 0; $i--) { if ($this->buffer[$currentCharIndex - $substringLen + $i + 1] == $this->substring[$i]) { if ($i == 0) { $this->results[] = $currentCharIndex - $substringLen; $currentCharIndex += $this->getJumpLength($this->buffer[$currentCharIndex]); } else { continue; } } else { $currentCharIndex += $this->getJumpLength($this->buffer[$currentCharIndex]); break; } } } return (sizeof($this->results) > 0); } protected function deriveJumpTable() { $maxJump = strlen($this->substring); for ($i = strlen($this->substring) - 2; $i >= 0; $i--) { if (!array_key_exists($this->substring[$i], $this->jumpTable)) { $this->jumpTable[$this->substring[$i]] = $maxJump - $i -1; } } } public function getJumpTable() { return $this->jumpTable; } public function getResults() { return $this->results; } public function getResultsCount() { return sizeof($this->results); } public function getJumpLength($charIndex) { if (array_key_exists($charIndex, $this->jumpTable)) { return $this->jumpTable[$charIndex]; } else { return strlen($this->substring); } } } $poem = <<<POEM metrhdgzraputonyukbnuqtzfencojqzqfiggouzppqetrayteekplbyaxqitpmzqkpertdyrqtqupozoetqkejzgkakeetyqblajqizgnrndgmysfprsooyjhlhagozbisuqqpziotdgaeynlejopuzrnicjggyxtrprxnylnqfqsayubdkllezfgdakxbyttturmszsfgjgpuyiutbqkhzakaongpyxamejeezkuurpfdyextgumnztknfsqfzqsqusloznbsrxegysirdgskyadhfdggzqstrutxzdhqgsmnztcschtqyckfgicnzuprasjxyogmnreqytusrtlxzuurrtluzscdrqbfyphiuupdzogqfotkziejxldqykcpfhdbynninuneypqqrignztgscdleztgodstdytusutplygtfqplxzabpkntlyakagkemzneungfszqhgltdfzudlatauygsfbulkyscatulkzldtpxdqyqdfrrmjzthoxsnlyqgqmjflybhqhromynlbiposzhcptsgoynnscstcyqcjjerfyqxqaxutyotrursnymthuefiytrqsplmymcxeblsyxrcclkgzufttbrsyaduoqtfyloteicfytxtbjqqzlpmegjpyknrrlidydhgdupszglrhmtmzdqhpxhayqqsqmqryfhxhgttzbgdxhdoylxgfdrmydxtfriszmnkgacgzbxrjtolzqaubjqqzritehuuzmsirtrnzrjkxgnpyqrutottzlotcstcytfjicuczdsponujyrteunpqzshubksszasjohmkzcpoljgmyrkmnqgryklspueszrohuljazhfafsfnzuurtpkpyartlqqrzhedicpfyuqsqtlszsljblhkzcluflxfzusuurnqyxlhprcszajmialayruqumutzttjdmeeymxbcqspytoeajhfzdlplqaqzttesnlrypeqmxctzuiojqolzqeprljrylnichdnytmegarrzphbxgtmytjtfirsyolscrrdyrbigctaytpfaapuzcraukomyusutltsztrsafxeymsitfptyfkixkstzudgqaphynsbgdarygurnmmkztxqaktryxxqikhgyxfmprrrymmrcxdaytrrrotszimxlsaozmoqtidjzomuesscysegkduezstsqpqrymaulkeszjlphiqlzkopsorlzdtkmsfxyugalurtykqdxsbbyuqrtlsmzixrghxhzjbpnsssyontcgbfzxemdkfbyenmlnpsyiknpssczhlgmqauycphdnofztquupnhzuusqnnpyseqtauuzeernsufzomrcifayultpagjyfrcsjxdyaphxnxhzlpqrjexzekfgjaoynixebunyjfmrtkpzomsfusfytdhhaqdytgsaituyntssqsnyprxsfakysuuuphnzrkbouqtzjsckjfmzlobecojymladfphzuksejrryoxmarkkyrstljubzrsqslusykracphiyrgaosuryiemrtkozxciuaulynprqqtsysgtakuqzagqkrnpzrducxsrybajmmbiymeqfeluycekksrgzgnerkctzlxkxopgythregstzpnsbtqfzqfhjetaztttruiizqkfqsnryjcpcgfbymlpfixmyatlsnirzurrumomyckxhnbiyhmxpdaqyjebufgsyxnxmtbrziikguskyrpmflgnzqgmnsbsyjlmlorgypgonongzqlthxslypoioslfyrtrrnsrzmauthchyjmlspunzkdsomljznglcqnkyekbukkhytltlaigycgxhxsuyjmrosfnzubpcguhzbnjoctazhejkeaszxenqncnymuofuacyuxjkdxrzmogmsmdynqqrgxmyanuqixiztquumsryjlsnejqztqrpxuazgfppeeuzleqpjaqyqxscirsycjiqtqrzbgktssuykcodkdfzsatssnjzoostuutyqrfodfuykcrnfcpzqsquorsyrbetspizeikdqnqyaruafgizlltftsbzqfaxnnczpxmbuhhyusunxreyatcspbozemxbcirzsruqukxzmmucjcbzboqmtfsysgqfgsryscudummyjsgkhukytussolozfhgjgtqyqeuqfusyfdtortczonrahceyturqmrqzlbuqgchzekrprnkyhnthlrpycqxlgjaycjtitlmzufrdguqzsgsfjtszhnoonqkzmrktbexyilfqmiryridnttuzcgrfrguyrinqmgtygcoagcczbolllluzgxnntsbyrsrrprszontauuazuagxcudyndixjmsyjrqpujpzlcuugfkygthqtcozpgosxeczxpuldiuzqtsnhqdzqbnkdkkyskqdirryniesqsmzoaugskmyaplaspiytutsppnzlarsgfhznbsoeahzbikjhsuzrmgpmoxynxffsumzspbaijcyqsctnpsznxkbllpyodqojaryeoqdogbzmqubsthypeqnpkhyulccckxydkjaspsytqqspqszxmujotozeukphgcytoqgsflygifjeeqylhxbeqozqksdxqtznrgufdgytcebmrbygnmtlsnyagtnrmhzpnudeggysuqqicpykfsnqtoytrqslutzsdroddtynppkmohyrrcrnouzokgbpomyofqoxfszlnrlbprympieeohzkoraiaezpcuepgszoldinouyoucfmgczskbqkqrzlaxpegjzjquedapzsoktdolyrkqdhstzlpretrazqagjcscznqtqqtozltjtffjztutumpozdjtjxhqynjncpjrzdkttqtlyjnsfiedyfjihhsrynnkdflkymsxrghdysurrptszuoxlnnjypjakiskymnrdttdyrdxidtbypsqrsulynuiqbfjyofkiinryobdnltpztabuubeyudoductylkmdokszrhqahstybxrauxrymokiccxzcxtjrlpzrdtahrqyheodkdfzbsbjkmiyilmplshzfitiqpmztaqejuqzusttppm POEM; $bm = new BoyerMooreStringSearch(); $bm->search($poem, $poem); print_r($bm);
Output for git.master, git.master_jit, rfc.property-hooks
BoyerMooreStringSearch Object ( [substring] => metrhdgzraputonyukbnuqtzfencojqzqfiggouzppqetrayteekplbyaxqitpmzqkpertdyrqtqupozoetqkejzgkakeetyqblajqizgnrndgmysfprsooyjhlhagozbisuqqpziotdgaeynlejopuzrnicjggyxtrprxnylnqfqsayubdkllezfgdakxbyttturmszsfgjgpuyiutbqkhzakaongpyxamejeezkuurpfdyextgumnztknfsqfzqsqusloznbsrxegysirdgskyadhfdggzqstrutxzdhqgsmnztcschtqyckfgicnzuprasjxyogmnreqytusrtlxzuurrtluzscdrqbfyphiuupdzogqfotkziejxldqykcpfhdbynninuneypqqrignztgscdleztgodstdytusutplygtfqplxzabpkntlyakagkemzneungfszqhgltdfzudlatauygsfbulkyscatulkzldtpxdqyqdfrrmjzthoxsnlyqgqmjflybhqhromynlbiposzhcptsgoynnscstcyqcjjerfyqxqaxutyotrursnymthuefiytrqsplmymcxeblsyxrcclkgzufttbrsyaduoqtfyloteicfytxtbjqqzlpmegjpyknrrlidydhgdupszglrhmtmzdqhpxhayqqsqmqryfhxhgttzbgdxhdoylxgfdrmydxtfriszmnkgacgzbxrjtolzqaubjqqzritehuuzmsirtrnzrjkxgnpyqrutottzlotcstcytfjicuczdsponujyrteunpqzshubksszasjohmkzcpoljgmyrkmnqgryklspueszrohuljazhfafsfnzuurtpkpyartlqqrzhedicpfyuqsqtlszsljblhkzcluflxfzusuurnqyxlhprcszajmialayruqumutzttjdmeeymxbcqspytoeajhfzdlplqaqzttesnlrypeqmxctzuiojqolzqeprljrylnichdnytmegarrzphbxgtmytjtfirsyolscrrdyrbigctaytpfaapuzcraukomyusutltsztrsafxeymsitfptyfkixkstzudgqaphynsbgdarygurnmmkztxqaktryxxqikhgyxfmprrrymmrcxdaytrrrotszimxlsaozmoqtidjzomuesscysegkduezstsqpqrymaulkeszjlphiqlzkopsorlzdtkmsfxyugalurtykqdxsbbyuqrtlsmzixrghxhzjbpnsssyontcgbfzxemdkfbyenmlnpsyiknpssczhlgmqauycphdnofztquupnhzuusqnnpyseqtauuzeernsufzomrcifayultpagjyfrcsjxdyaphxnxhzlpqrjexzekfgjaoynixebunyjfmrtkpzomsfusfytdhhaqdytgsaituyntssqsnyprxsfakysuuuphnzrkbouqtzjsckjfmzlobecojymladfphzuksejrryoxmarkkyrstljubzrsqslusykracphiyrgaosuryiemrtkozxciuaulynprqqtsysgtakuqzagqkrnpzrducxsrybajmmbiymeqfeluycekksrgzgnerkctzlxkxopgythregstzpnsbtqfzqfhjetaztttruiizqkfqsnryjcpcgfbymlpfixmyatlsnirzurrumomyckxhnbiyhmxpdaqyjebufgsyxnxmtbrziikguskyrpmflgnzqgmnsbsyjlmlorgypgonongzqlthxslypoioslfyrtrrnsrzmauthchyjmlspunzkdsomljznglcqnkyekbukkhytltlaigycgxhxsuyjmrosfnzubpcguhzbnjoctazhejkeaszxenqncnymuofuacyuxjkdxrzmogmsmdynqqrgxmyanuqixiztquumsryjlsnejqztqrpxuazgfppeeuzleqpjaqyqxscirsycjiqtqrzbgktssuykcodkdfzsatssnjzoostuutyqrfodfuykcrnfcpzqsquorsyrbetspizeikdqnqyaruafgizlltftsbzqfaxnnczpxmbuhhyusunxreyatcspbozemxbcirzsruqukxzmmucjcbzboqmtfsysgqfgsryscudummyjsgkhukytussolozfhgjgtqyqeuqfusyfdtortczonrahceyturqmrqzlbuqgchzekrprnkyhnthlrpycqxlgjaycjtitlmzufrdguqzsgsfjtszhnoonqkzmrktbexyilfqmiryridnttuzcgrfrguyrinqmgtygcoagcczbolllluzgxnntsbyrsrrprszontauuazuagxcudyndixjmsyjrqpujpzlcuugfkygthqtcozpgosxeczxpuldiuzqtsnhqdzqbnkdkkyskqdirryniesqsmzoaugskmyaplaspiytutsppnzlarsgfhznbsoeahzbikjhsuzrmgpmoxynxffsumzspbaijcyqsctnpsznxkbllpyodqojaryeoqdogbzmqubsthypeqnpkhyulccckxydkjaspsytqqspqszxmujotozeukphgcytoqgsflygifjeeqylhxbeqozqksdxqtznrgufdgytcebmrbygnmtlsnyagtnrmhzpnudeggysuqqicpykfsnqtoytrqslutzsdroddtynppkmohyrrcrnouzokgbpomyofqoxfszlnrlbprympieeohzkoraiaezpcuepgszoldinouyoucfmgczskbqkqrzlaxpegjzjquedapzsoktdolyrkqdhstzlpretrazqagjcscznqtqqtozltjtffjztutumpozdjtjxhqynjncpjrzdkttqtlyjnsfiedyfjihhsrynnkdflkymsxrghdysurrptszuoxlnnjypjakiskymnrdttdyrdxidtbypsqrsulynuiqbfjyofkiinryobdnltpztabuubeyudoductylkmdokszrhqahstybxrauxrymokiccxzcxtjrlpzrdtahrqyheodkdfzbsbjkmiyilmplshzfitiqpmztaqejuqzusttppm [buffer] => metrhdgzraputonyukbnuqtzfencojqzqfiggouzppqetrayteekplbyaxqitpmzqkpertdyrqtqupozoetqkejzgkakeetyqblajqizgnrndgmysfprsooyjhlhagozbisuqqpziotdgaeynlejopuzrnicjggyxtrprxnylnqfqsayubdkllezfgdakxbyttturmszsfgjgpuyiutbqkhzakaongpyxamejeezkuurpfdyextgumnztknfsqfzqsqusloznbsrxegysirdgskyadhfdggzqstrutxzdhqgsmnztcschtqyckfgicnzuprasjxyogmnreqytusrtlxzuurrtluzscdrqbfyphiuupdzogqfotkziejxldqykcpfhdbynninuneypqqrignztgscdleztgodstdytusutplygtfqplxzabpkntlyakagkemzneungfszqhgltdfzudlatauygsfbulkyscatulkzldtpxdqyqdfrrmjzthoxsnlyqgqmjflybhqhromynlbiposzhcptsgoynnscstcyqcjjerfyqxqaxutyotrursnymthuefiytrqsplmymcxeblsyxrcclkgzufttbrsyaduoqtfyloteicfytxtbjqqzlpmegjpyknrrlidydhgdupszglrhmtmzdqhpxhayqqsqmqryfhxhgttzbgdxhdoylxgfdrmydxtfriszmnkgacgzbxrjtolzqaubjqqzritehuuzmsirtrnzrjkxgnpyqrutottzlotcstcytfjicuczdsponujyrteunpqzshubksszasjohmkzcpoljgmyrkmnqgryklspueszrohuljazhfafsfnzuurtpkpyartlqqrzhedicpfyuqsqtlszsljblhkzcluflxfzusuurnqyxlhprcszajmialayruqumutzttjdmeeymxbcqspytoeajhfzdlplqaqzttesnlrypeqmxctzuiojqolzqeprljrylnichdnytmegarrzphbxgtmytjtfirsyolscrrdyrbigctaytpfaapuzcraukomyusutltsztrsafxeymsitfptyfkixkstzudgqaphynsbgdarygurnmmkztxqaktryxxqikhgyxfmprrrymmrcxdaytrrrotszimxlsaozmoqtidjzomuesscysegkduezstsqpqrymaulkeszjlphiqlzkopsorlzdtkmsfxyugalurtykqdxsbbyuqrtlsmzixrghxhzjbpnsssyontcgbfzxemdkfbyenmlnpsyiknpssczhlgmqauycphdnofztquupnhzuusqnnpyseqtauuzeernsufzomrcifayultpagjyfrcsjxdyaphxnxhzlpqrjexzekfgjaoynixebunyjfmrtkpzomsfusfytdhhaqdytgsaituyntssqsnyprxsfakysuuuphnzrkbouqtzjsckjfmzlobecojymladfphzuksejrryoxmarkkyrstljubzrsqslusykracphiyrgaosuryiemrtkozxciuaulynprqqtsysgtakuqzagqkrnpzrducxsrybajmmbiymeqfeluycekksrgzgnerkctzlxkxopgythregstzpnsbtqfzqfhjetaztttruiizqkfqsnryjcpcgfbymlpfixmyatlsnirzurrumomyckxhnbiyhmxpdaqyjebufgsyxnxmtbrziikguskyrpmflgnzqgmnsbsyjlmlorgypgonongzqlthxslypoioslfyrtrrnsrzmauthchyjmlspunzkdsomljznglcqnkyekbukkhytltlaigycgxhxsuyjmrosfnzubpcguhzbnjoctazhejkeaszxenqncnymuofuacyuxjkdxrzmogmsmdynqqrgxmyanuqixiztquumsryjlsnejqztqrpxuazgfppeeuzleqpjaqyqxscirsycjiqtqrzbgktssuykcodkdfzsatssnjzoostuutyqrfodfuykcrnfcpzqsquorsyrbetspizeikdqnqyaruafgizlltftsbzqfaxnnczpxmbuhhyusunxreyatcspbozemxbcirzsruqukxzmmucjcbzboqmtfsysgqfgsryscudummyjsgkhukytussolozfhgjgtqyqeuqfusyfdtortczonrahceyturqmrqzlbuqgchzekrprnkyhnthlrpycqxlgjaycjtitlmzufrdguqzsgsfjtszhnoonqkzmrktbexyilfqmiryridnttuzcgrfrguyrinqmgtygcoagcczbolllluzgxnntsbyrsrrprszontauuazuagxcudyndixjmsyjrqpujpzlcuugfkygthqtcozpgosxeczxpuldiuzqtsnhqdzqbnkdkkyskqdirryniesqsmzoaugskmyaplaspiytutsppnzlarsgfhznbsoeahzbikjhsuzrmgpmoxynxffsumzspbaijcyqsctnpsznxkbllpyodqojaryeoqdogbzmqubsthypeqnpkhyulccckxydkjaspsytqqspqszxmujotozeukphgcytoqgsflygifjeeqylhxbeqozqksdxqtznrgufdgytcebmrbygnmtlsnyagtnrmhzpnudeggysuqqicpykfsnqtoytrqslutzsdroddtynppkmohyrrcrnouzokgbpomyofqoxfszlnrlbprympieeohzkoraiaezpcuepgszoldinouyoucfmgczskbqkqrzlaxpegjzjquedapzsoktdolyrkqdhstzlpretrazqagjcscznqtqqtozltjtffjztutumpozdjtjxhqynjncpjrzdkttqtlyjnsfiedyfjihhsrynnkdflkymsxrghdysurrptszuoxlnnjypjakiskymnrdttdyrdxidtbypsqrsulynuiqbfjyofkiinryobdnltpztabuubeyudoductylkmdokszrhqahstybxrauxrymokiccxzcxtjrlpzrdtahrqyheodkdfzbsbjkmiyilmplshzfitiqpmztaqejuqzusttppm [jumpTable] => Array ( [m] => 1 [p] => 2 [t] => 4 [s] => 6 [u] => 7 [z] => 8 [q] => 9 [j] => 11 [e] => 12 [a] => 14 [i] => 20 [f] => 23 [h] => 25 [l] => 27 [y] => 32 [k] => 35 [b] => 37 [d] => 42 [o] => 45 [r] => 50 [x] => 62 [c] => 63 [n] => 116 [g] => 187 ) [results:protected] => Array ( [0] => -1 ) )

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:
36.03 ms | 417 KiB | 8 Q