3v4l.org

run code in 300+ PHP versions simultaneously
<?php function array_transpose_basic(array|object $object_or_array): array|object { $levelOneType = gettype($object_or_array); if (!in_array($levelOneType, ['array', 'object'])) { throw new Exception("Error: array_transpose() expects parameter 1 to be an array or object, $levelOneType given"); } $result = []; foreach ($object_or_array as $rowKey => $row) { $levelTwoType = gettype($row); if (!in_array($levelTwoType, ['array', 'object'])) { throw new Exception("Error: array_transpose() expects parameter 1 to contain rows of arrays or objects, $levelTwoType given"); } foreach ($row as $columnKey => $value) { $result[$columnKey][$rowKey] = $value; } } return $result; } function array_transpose_types(array|object $object_or_array): array|object { $levelOneType = gettype($object_or_array); if (!in_array($levelOneType, ['array', 'object'])) { throw new Exception("Fatal error: Uncaught TypeError: array_transpose(): Argument #1 ($object_or_array) must be of type object|array, $levelOneType given"); } foreach ($object_or_array as $rowKey => $row) { $levelTwoType = gettype($row); if (!in_array($levelTwoType, ['array', 'object'])) { throw new Exception("Fatal error: Uncaught TypeError: array_transpose(): Argument #1 ($object_or_array) must contain rows of type object|array, $levelTwoType given"); } $result ??= ($levelTwoType === 'array' ? [] : (object)[]); foreach ($row as $columnKey => $value) { if ($levelTwoType === 'array') { if ($levelOneType === 'array') { $result[$columnKey][$rowKey] = $value; } else { $result[$columnKey]->$rowKey = $value; } } else { if (!property_exists($result, $columnKey)) { $result->$columnKey = ($levelOneType === 'array' ? [] : (object)[]); } if ($levelOneType === 'array') { $result->{$columnKey}[$rowKey] = $value; } else { $result->{$columnKey}->$rowKey = $value; } } } } return $result ?? ($levelOneType === 'array' ? [] : (object)[]); } function array_transpose_splat(array|object $object_or_array): array { if (!is_array($object_or_array)) { return ["must be array"]; } if (!$object_or_array) { return ["must not be empty"]; } foreach ($object_or_array as $key => $value) { if (!ctype_digit((string)$key)) { return ["may only contain numeric first level keys"]; } if (!is_array($value)) { return ["may only contain arrays in second level"]; } } return array_map(null, ...$object_or_array); } $test = (object) []; echo var_export(array_transpose_basic($test), true) . "\n---\n"; echo var_export(array_transpose_types($test), true) . "\n---\n"; echo var_export(array_transpose_splat($test), true);

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.4.120.0100.01020.53
8.4.110.0140.00622.71
8.4.100.0180.00417.67
8.4.90.0150.00718.68
8.4.80.0060.01719.75
8.4.70.0070.00518.23
8.4.60.0140.00618.63
8.4.50.0110.00618.78
8.4.40.0030.01619.44
8.4.30.0100.00020.62
8.4.20.0040.00417.93
8.4.10.0060.00322.29
8.3.250.0080.00618.84
8.3.240.0110.00816.74
8.3.230.0060.00616.54
8.3.220.0130.00617.25
8.3.210.0120.00616.70
8.3.200.0050.00416.68
8.3.190.0110.00818.74
8.3.180.0060.00318.56
8.3.170.0160.00318.95
8.3.160.0110.00820.35
8.3.150.0150.00318.37
8.3.140.0000.00817.24
8.3.130.0080.00018.39
8.3.120.0080.00020.63
8.3.110.0000.00916.89
8.3.100.0040.00416.85
8.3.90.0070.00426.77
8.3.80.0090.00016.73
8.3.70.0140.00716.75
8.3.60.0120.00318.31
8.3.50.0140.00420.16
8.3.40.0110.00418.84
8.3.30.0110.00319.01
8.3.20.0050.00224.18
8.3.10.0050.00324.66
8.3.00.0000.00826.16
8.2.290.0100.00920.54
8.2.280.0160.00418.41
8.2.270.0150.00318.73
8.2.260.0130.00316.63
8.2.250.0040.00417.54
8.2.240.0080.00018.82
8.2.230.0030.00620.94
8.2.220.0160.00324.06
8.2.210.0090.00926.77
8.2.200.0030.00616.75
8.2.190.0030.01216.75
8.2.180.0120.00425.92
8.2.170.0120.00619.14
8.2.160.0060.00922.96
8.2.150.0020.00525.66
8.2.140.0040.00424.66
8.2.130.0050.00326.16
8.2.120.0000.00819.71
8.2.110.0070.00422.30
8.2.100.0090.00317.84
8.2.90.0000.00817.75
8.2.80.0000.00818.05
8.2.70.0050.00318.05
8.2.60.0050.00317.75
8.2.50.0000.00817.63
8.2.40.0040.00419.94
8.2.30.0040.00418.11
8.2.20.0040.00420.48
8.2.10.0000.00818.07
8.2.00.0040.00419.22
8.1.330.0110.00922.28
8.1.320.0130.00818.49
8.1.310.0000.01418.18
8.1.300.0060.00318.12
8.1.290.0080.00030.84
8.1.280.0070.01325.92
8.1.270.0040.00423.99
8.1.260.0100.00026.35
8.1.250.0040.00428.09
8.1.240.0080.00022.01
8.1.230.0030.00920.31
8.1.220.0000.00817.79
8.1.210.0030.00618.77
8.1.200.0030.00917.35
8.1.190.0040.00417.35
8.1.180.0040.00418.10
8.1.170.0000.00818.63
8.1.160.0000.00718.83
8.1.150.0000.00818.73
8.1.140.0000.00717.39
8.1.130.0030.00318.81
8.1.120.0050.00317.42
8.1.110.0040.00417.49
8.1.100.0040.00417.50
8.1.90.0040.00417.42
8.1.80.0060.00317.55
8.1.70.0000.00717.53
8.1.60.0000.00817.52
8.1.50.0070.00817.32
8.1.40.0130.00316.86
8.1.30.0030.00917.27
8.1.20.0090.00917.36
8.1.10.0100.01017.26
8.1.00.0160.00617.04
8.0.300.0060.00319.85
8.0.290.0030.00517.00
8.0.280.0030.00618.50
8.0.270.0000.00716.93
8.0.260.0000.00618.37
8.0.250.0040.00417.05
8.0.240.0000.00716.95
8.0.230.0000.00716.96
8.0.220.0030.00316.93
8.0.210.0000.00716.98
8.0.200.0000.00716.97
8.0.190.0000.00816.93
8.0.180.0130.00816.39
8.0.170.0130.00416.34
8.0.160.0070.01116.53
8.0.150.0120.00216.58
8.0.140.0040.00816.51
8.0.130.0050.00516.60
8.0.120.0080.00316.51
8.0.110.0080.00616.39
8.0.100.0170.00016.84
8.0.90.0090.00316.25
8.0.80.0060.00616.33
8.0.70.0060.00616.32
8.0.60.0060.00616.46
8.0.50.0090.00516.34
8.0.30.0150.00316.53
8.0.20.0060.01016.84
8.0.10.0090.00916.71
7.4.330.0050.00015.55
7.4.320.0020.00516.34
7.4.300.0030.00316.42
7.4.290.0170.00016.16
7.4.280.0070.00715.73
7.4.270.0150.00216.13
7.4.260.0150.00016.17
7.4.250.0120.00316.05
7.4.240.0070.00515.30
7.4.230.0140.00316.00
7.4.220.0130.00316.03
7.4.210.0110.00416.07
7.4.200.0140.00016.35
7.4.190.0070.01016.06
7.4.180.0030.00915.77
7.4.160.0080.00415.86
7.4.150.0120.00315.79
7.4.140.0000.01215.72
7.4.130.0100.00315.79
7.4.120.0120.00415.86
7.4.110.0160.00015.97
7.4.100.0100.01015.96
7.4.90.0090.00915.97
7.4.80.0120.00616.02
7.4.70.0110.00715.70
7.4.60.0130.00315.65
7.4.50.0100.00515.79
7.4.40.0080.00815.70
7.4.30.0120.00315.42
7.4.20.0050.00515.79
7.4.10.0000.00616.29
7.4.00.0090.00016.01

preferences:
101.56 ms | 403 KiB | 5 Q