3v4l.org

run code in 300+ PHP versions simultaneously
<?php sms_message_parts("The fox"); function sms_message_parts($message) { // Message parts $parts = array(); // The default encoding is utf16 (unicode) until proven otherwise $encoding = 'utf16'; // Characters that are allowed in 7bit messages $gsm_7bit_chars = '@£$¥èéùìòÇ\nØø\rÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !"#¤%&\'\(\)\*+,-\.\/0123456789:;<=>?¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà'; // Characters that are allowed in 7bit_ex messages $gsm_7bit_ex_chars = '\^{}\\\\\[~\]|€'; // Message lengths $message_lengths = array( '7bit' = > 160, '7bit_ex' = > 160, 'utf16' = > 70); // Detect encoding of message if (preg_match("/^[".$gsm_7bit_chars."]*$/u", $message) == 1) $encoding = '7bit'; elseif(preg_match("/^[".$gsm_7bit_chars.$gsm_7bit_ex_chars."]*$/u", $message) == 1) $encoding = '7bit_ex'; // Determine how long each part of the message can be $max_parts_length = $message_lengths[$encoding]; // Length of the message $message_length = mb_strlen($message, 'UTF-8'); // 7bit_ex message // Escaped characters found so we need to find the REAL length // and split the message differently if ($encoding == '7bit_ex') { // Count how many extra characters are required a result of // the 7bit_ex characters $extra_chars = 0; for ($i = 0; $i < $message_length; $i++) { if (preg_match("/^[".$gsm_7bit_ex_chars."]*$/u", mb_substr($message, $i, 1, 'UTF-8')) == 1) $extra_chars++; } // New message length $new_message_length = $message_length + $extra_chars; // Is this going to be a multipart message? if ($new_message_length > $max_parts_length) { // Split the message $start = 0; while (true) { // Determine the length of the split (if it's the last part, we don't need to look for // extra "escaped" characters) $last_part = false; $chars_left = $message_length - $start; if ($chars_left < $max_parts_length) { $split_length = $chars_left; $last_part = true; } else { $split_length = $max_parts_length; } // Extract the message part $part = mb_substr($message, $start, $split_length, 'UTF-8'); // Check to see if this part has any escaped characters $part_extra_chars = 0; if (!$last_part) { for ($i = 0; $i < $split_length; $i++) { if (preg_match("/^[".$gsm_7bit_ex_chars."]*$/u", mb_substr($part, $i, 1, 'UTF-8')) == 1) $part_extra_chars++; } } // If it has escaped characters, deduct from the amount of characters in this part // before adding to the parts array if ($part_extra_chars > 0) { $part = mb_substr($message, $start, ($split_length - $part_extra_chars), 'UTF-8'); $parts[] = trim($part); $start = $start + ($split_length - $part_extra_chars); // No escaped characters, add part to parts array } else { $parts[] = trim($part).' '.$split_length; $start = $start + $max_parts_length; } // We've reached the end of the message if ($start >= $message_length) break; } // It's a signle message } else { $parts[] = $message; } // 7bit and utf16 (unicode) messages don't have escaped characters } else { // Is this going to be a multipart message? Split this part before adding to the // parts array if ($message_length > $max_parts_length) { // Split the message into parts $total_messages = ceil($message_length / $max_parts_length); $start = 0; for ($i = 0; $i < $total_messages; $i++) { $parts[] = trim(mb_substr($message, $start, $max_parts_length, 'UTF-8')); $start = $start + $max_parts_length; } // It's a signle message } else { $parts[] = $message; } } return array('parts' = > $parts, 'encoding' = > $encoding); } ?>

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)
5.4.360.0100.04018.79
5.4.350.0100.04915.52
5.4.340.0130.04415.44
5.4.320.0100.05015.82
5.4.310.0120.04215.71
5.4.300.0040.04715.83
5.4.290.0090.04615.75
5.4.280.0090.04615.70
5.4.270.0050.05615.65
5.4.260.0040.06315.69
5.4.250.0050.05315.61
5.4.240.0070.06715.72
5.4.230.0130.04715.68
5.4.220.0150.05015.67
5.4.210.0080.04215.68
5.4.200.0060.05915.64
5.4.190.0120.04915.74
5.4.180.0040.04715.79
5.4.170.0040.04815.75
5.4.160.0080.04615.64
5.4.150.0120.05415.63
5.4.140.0070.04814.35
5.4.130.0050.04514.37
5.4.120.0050.04714.20
5.4.110.0070.05314.21
5.4.100.0130.04014.34
5.4.90.0130.04314.28
5.4.80.0110.04814.31
5.4.70.0070.04114.28
5.4.60.0060.04914.31
5.4.50.0100.03914.19
5.4.40.0110.04114.35
5.4.30.0060.04414.18
5.4.20.0110.04214.31
5.4.10.0110.04014.31
5.4.00.0120.04013.83
5.3.290.0050.04813.79
5.3.280.0050.04413.68
5.3.270.0060.04713.80
5.3.260.0040.04913.69
5.3.250.0070.04613.79
5.3.240.0050.05013.72
5.3.230.0060.06113.71
5.3.220.0100.04613.69
5.3.210.0030.05013.72
5.3.200.0110.05213.71
5.3.190.0070.05113.76
5.3.180.0070.04613.76
5.3.170.0040.04613.71
5.3.160.0110.04513.71
5.3.150.0080.04413.77
5.3.140.0050.04513.55
5.3.130.0130.04913.74
5.3.120.0110.04413.74
5.3.110.0130.05013.64
5.3.100.0070.04813.11
5.3.90.0040.04713.07
5.3.80.0050.04913.14
5.3.70.0110.04713.16
5.3.60.0090.04013.12
5.3.50.0070.04212.97
5.3.40.0150.03413.02
5.3.30.0090.04313.07
5.3.20.0110.04512.80
5.3.10.0120.04812.76
5.3.00.0060.05212.68
5.2.170.0070.03410.31
5.2.160.0050.03510.19
5.2.150.0050.03710.25
5.2.140.0060.04410.31
5.2.130.0090.04010.21
5.2.120.0040.03810.22
5.2.110.0100.03910.26
5.2.100.0050.03710.16
5.2.90.0060.03410.15
5.2.80.0070.04210.20
5.2.70.0060.04710.22
5.2.60.0080.04110.18
5.2.50.0080.03310.18
5.2.40.0080.03310.15
5.2.30.0040.04010.14
5.2.20.0050.03610.09
5.2.10.0100.03910.03
5.2.00.0070.0329.84
5.1.60.0100.0269.16
5.1.50.0050.0329.01
5.1.40.0050.0379.11
5.1.30.0050.0359.45
5.1.20.0070.0319.51
5.1.10.0080.0319.15
5.1.00.0060.0349.24
5.0.50.0210.0197.63
5.0.40.0050.0237.53
5.0.30.0050.0367.35
5.0.20.0050.0237.31
5.0.10.0020.0327.36
5.0.00.0050.0357.32
4.4.90.0040.0226.19
4.4.80.0060.0146.18
4.4.70.0040.0246.18
4.4.60.0020.0236.18
4.4.50.0030.0206.19
4.4.40.0060.0286.16
4.4.30.0060.0226.18
4.4.20.0050.0206.22
4.4.10.0010.0256.23
4.4.00.0050.0346.18
4.3.110.0050.0226.14
4.3.100.0020.0206.13
4.3.90.0020.0186.12
4.3.80.0020.0306.10
4.3.70.0060.0146.12
4.3.60.0030.0186.12
4.3.50.0020.0226.12
4.3.40.0030.0326.04
4.3.30.0040.0205.34
4.3.20.0040.0185.31
4.3.10.0030.0245.30
4.3.00.0030.0208.13

preferences:
145.34 ms | 1398 KiB | 7 Q