3v4l.org

run code in 300+ PHP versions simultaneously
<?php class KeywordParameters { public $post_name; public $cat_slug; public $base; public $medium; public function __construct($post_name, $cat_slug, $base, $medium) { $this->post_name = $post_name; $this->cat_slug = $cat_slug; $this->base = $base; $this->medium = $medium; } } class Replacements { public $replacements_list; public $keyword_parameters; public function __construct($replacements_list, $keyword_parameters) { $this->replacements_list = $replacements_list; $this->keyword_parameters = $keyword_parameters; } } class ReplacementTasks { const PATTERN_FORMAT = '~(?=[%s])(?=\b\w|(?<!\S)\W)(?:%s)(?<=\w\b|\W(?!\S))~ui'; protected $replacement_tasks = []; protected $formats = []; protected $pattern = false; protected $first_characters; protected $first_character_discrimination; protected $alternation; protected $keywords = []; public function add(Replacements $replacements) { $params = $replacements->keyword_parameters; $format = '<a href="' . $params->base . '%s?utm_source=blogpost&utm_medium=' . $params->medium . '&utm_content=' . $params->post_name . '&utm_campaign=' . $params->cat_slug . '" target="_blank">%s</a>'; $formats_last_index = array_push($this->formats, $format) - 1; foreach ($replacements->replacements_list as $keyword => $replacement) { $this->first_characters[] = mb_substr($keyword, 0, 1, 'UTF-8'); $this->replacement_tasks[$keyword] = [ 'replacement' => $replacement, 'format' => &$this->formats[$formats_last_index] ]; $this->keywords[] = preg_quote($keyword, '~'); } $this->pattern = false; } public function replace($str) { $this->build_pattern(); $that = &$this; return preg_replace_callback($this->pattern, function ($m) use (&$that) { return sprintf($that->replacement_tasks[$m[0]]['format'], $that->replacement_tasks[$m[0]]['replacement'], $m[0]); }, $str); } protected function build_pattern() { if ( $this->pattern ) return; $this->build_pattern_elements(); $this->pattern = sprintf(self::PATTERN_FORMAT, $this->first_character_discrimination, $this->alternation); } protected function build_pattern_elements() { rsort($this->keywords); $this->alternation = implode('|', $this->keywords); $this->first_character_discrimination = preg_quote(implode('', array_unique($this->first_characters)), '~'); } } $data = array( 'post_content' => 'làm game developer việc làm Game Developer việc làm Game Developer TPHCM việc làm Game Developer Hà Nội việc làm Senior Game Developer việc làm Senior Game Developer TPHCM', 'post_name' => 'Test post' ); $cat_slug = 'test'; $parameters_external = new KeywordParameters($data['post_name'], $cat_slug, 'https://itviec.com/', 'jobs'); $parameters_internal = new KeywordParameters($data['post_name'], $cat_slug, 'https://blog.itviec.com/', 'referral'); $keywords_internal = array( "làm game developer" => "game-developer-ban-co-muon-lam/", ); $keywords_external = array( "việc làm Game Developer TPHCM" => "viec-lam-it/game-developer/ho-chi-minh-hcm", "việc làm Game Developer Hà Nội" => "viec-lam-it/game-developer/ha-noi", "việc làm Game Developer" => "viec-lam-it/game-developer", ); $replacements_external = new Replacements($keywords_external, $parameters_external); $replacements_internal = new Replacements($keywords_internal, $parameters_internal); $replacement_tasks = new ReplacementTasks(); $replacement_tasks->add($replacements_external); $replacement_tasks->add($replacements_internal); echo $replacement_tasks->replace($data['post_content']);

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.3.60.0100.00517.13
8.3.50.0040.01116.61
8.3.40.0150.00619.10
8.3.30.0090.00619.14
8.3.20.0050.00320.16
8.3.10.0030.00523.65
8.3.00.0090.01217.97
8.2.180.0110.01116.88
8.2.170.0080.01222.96
8.2.160.0090.00620.39
8.2.150.0060.00324.18
8.2.140.0050.00224.66
8.2.130.0080.00019.46
8.2.120.0080.00026.35
8.2.110.0060.00319.31
8.2.100.0090.00318.28
8.2.90.0040.00419.17
8.2.80.0040.00418.18
8.2.70.0040.00818.00
8.2.60.0030.00618.13
8.2.50.0030.00618.10
8.2.40.0040.00422.41
8.2.30.0060.00319.41
8.2.20.0060.00318.22
8.2.10.0040.00418.29
8.2.00.0080.00018.31
8.1.280.0090.00925.92
8.1.270.0050.00322.27
8.1.260.0040.01126.35
8.1.250.0040.00428.09
8.1.240.0060.00322.57
8.1.230.0090.00617.71
8.1.220.0060.00318.03
8.1.210.0000.00818.77
8.1.200.0030.00617.60
8.1.190.0000.01217.38
8.1.180.0030.00518.10
8.1.170.0030.00618.84
8.1.160.0060.00319.03
8.1.150.0000.00820.76
8.1.140.0050.00319.72
8.1.130.0070.00319.06
8.1.120.0000.00817.67
8.1.110.0100.00017.58
8.1.100.0040.00417.59
8.1.90.0040.00417.53
8.1.80.0040.00417.68
8.1.70.0040.00417.68
8.1.60.0030.00517.69
8.1.50.0040.00417.60
8.1.40.0050.00317.69
8.1.30.0030.00617.93
8.1.20.0090.00017.86
8.1.10.0030.00517.74
8.1.00.0000.00817.84
8.0.300.0030.00518.77
8.0.290.0040.00417.13
8.0.280.0040.00418.72
8.0.270.0040.00417.35
8.0.260.0070.00017.30
8.0.250.0070.00017.36
8.0.240.0050.00517.30
8.0.230.0030.00617.43
8.0.220.0030.00317.28
8.0.210.0000.00817.22
8.0.200.0060.00017.25
8.0.190.0030.00717.27
8.0.180.0040.00717.35
8.0.170.0040.00417.29
8.0.160.0000.01017.23
8.0.150.0020.00517.26
8.0.140.0000.00717.32
8.0.130.0000.00713.74
8.0.120.0070.00017.26
8.0.110.0000.00717.38
8.0.100.0080.00017.35
8.0.90.0080.00017.37
8.0.80.0100.00717.32
8.0.70.0040.00417.38
8.0.60.0050.00317.37
8.0.50.0040.00417.13
8.0.30.0110.01017.52
8.0.20.0110.00917.46
8.0.10.0020.00517.14
8.0.00.0130.00717.27
7.4.330.0000.00515.55
7.4.320.0040.00416.83
7.4.300.0000.00716.93
7.4.290.0090.00016.79
7.4.280.0000.00916.90
7.4.270.0030.00316.94
7.4.260.0000.00613.61
7.4.250.0000.00716.90
7.4.240.0070.00016.84
7.4.230.0000.00716.78
7.4.220.0030.02016.97
7.4.210.0070.01016.87
7.4.200.0030.00516.82
7.4.160.0130.00616.80
7.4.150.0040.01317.40
7.4.140.0100.00817.86
7.4.130.0170.00416.85
7.4.120.0080.01616.77
7.4.110.0070.01016.71
7.4.100.0150.00316.77
7.4.90.0070.01016.77
7.4.80.0120.00619.39
7.4.70.0100.00616.87
7.4.60.0130.00716.71
7.4.50.0060.00916.71
7.4.40.0120.00316.53
7.4.30.0130.00616.73
7.4.00.0050.01315.40
7.3.330.0000.00713.34
7.3.320.0000.00613.66
7.3.310.0000.00816.43
7.3.300.0030.00316.69
7.3.290.0030.00316.64
7.3.280.0090.01016.59
7.3.270.0110.01117.40
7.3.260.0070.01016.62
7.3.250.0100.01116.77
7.3.240.0110.00616.77
7.3.230.0070.01116.69
7.3.210.0100.00716.68
7.3.200.0100.00716.80
7.3.190.0130.00516.59
7.3.180.0090.01216.64
7.3.170.0080.00916.77
7.3.160.0090.00916.87
7.3.120.0090.00915.20
7.3.110.0020.01615.07
7.3.100.0090.00614.73
7.3.90.0020.01214.93
7.3.80.0060.00815.02
7.3.70.0020.01215.05
7.3.60.0060.00614.94
7.3.50.0080.00515.04
7.3.40.0070.00815.07
7.3.30.0050.01014.89
7.3.20.0020.01116.84
7.3.10.0080.00516.86
7.3.00.0060.01016.75
7.2.330.0120.00616.96
7.2.320.0070.01017.09
7.2.310.0090.01316.95
7.2.300.0080.01117.12
7.2.290.0120.00616.95
7.2.250.0060.01215.41
7.2.240.0120.00715.37
7.2.230.0150.00215.39
7.2.220.0030.00815.29
7.2.210.0060.00915.47
7.2.200.0050.00815.31
7.2.190.0080.00415.21
7.2.180.0070.00915.45
7.2.170.0080.00215.21
7.2.160.0040.00715.30
7.2.150.0030.01217.29
7.2.140.0000.01317.15
7.2.130.0050.00717.27
7.2.120.0110.00417.24
7.2.110.0050.00917.21
7.2.100.0050.00917.13
7.2.90.0070.00917.05
7.2.80.0050.00816.97
7.2.70.0050.00917.08
7.2.60.0070.00817.15
7.2.50.0060.00817.15
7.2.40.0060.00917.13
7.2.30.0070.00817.21
7.2.20.0030.01017.16
7.2.10.0060.01017.11
7.2.00.0040.01017.72
7.1.330.0080.00816.05
7.1.320.0050.00816.10
7.1.310.0050.00816.08
7.1.300.0080.00716.04
7.1.290.0050.01015.83
7.1.280.0020.00916.00
7.1.270.0090.00615.93
7.1.260.0050.00515.86
7.1.250.0090.00716.13
7.1.200.0150.00716.05
7.1.100.0000.01118.49
7.1.70.0070.00717.23
7.1.60.0220.01035.62
7.1.50.0180.01235.27
7.1.40.0260.00334.81
7.1.30.0260.00634.73
7.1.20.0130.01735.01
7.1.10.0030.01216.77
7.1.00.0060.00917.03
7.0.200.0060.00816.95
7.0.190.0030.01216.98
7.0.180.0060.00916.59
7.0.170.0100.00616.68
7.0.160.0030.01216.50
7.0.150.0050.01016.52
7.0.140.0030.01216.56
7.0.130.0100.00316.91
7.0.120.0060.00616.76
7.0.110.0080.00516.64
7.0.100.0050.00916.77
7.0.90.0120.00316.65
7.0.80.0060.01016.57
7.0.70.0000.01616.55
7.0.60.0000.01416.45
7.0.50.0000.01316.48
7.0.40.0060.00616.59
7.0.30.0000.01316.61
7.0.20.0030.01016.75
7.0.10.0090.00516.68
7.0.00.0050.00816.56

preferences:
41.14 ms | 400 KiB | 5 Q