3v4l.org

run code in 300+ PHP versions simultaneously
<?php function array_map_userland_one($callback, array $one) { if ($callback) { // return array_map($callback, $one); echo "- with callback - apply\n"; $return = []; foreach ($one as $key => $value) { $return[$key] = $callback($value); } return $return; } else { // return array_map(function($value) { return $value; }, $one); echo "- without callback - return copy\n"; return $one; } } function array_map_userland_many($callback, array $many) { // for simplicity, assuming non-associative arrays all of the same size if ($callback) { // return array_map($callback, ...$many); echo "- with callback - apply using array of values\n"; $return = []; for ($i = 0; $i < count($many[0]); $i++) { $args = []; foreach ($many as $array) { $args[] = $array[$i]; } $return[$i] = $callback(...$args); } return $return; } else { // return array_map(function(...$values) { return $values; }, ...$many); echo "- without callback - use array of values\n"; $return = []; for ($i = 0; $i < count($many[0]); $i++) { $return[$i] = []; foreach ($many as $array) { $return[$i][] = $array[$i]; } } return $return; } } function array_map_userland($callback, ...$arrays) { if (count($arrays) == 1) { echo "- one array\n"; return array_map_userland_one($callback, $arrays[0]); } else { echo "- many arrays\n"; return array_map_userland_many($callback, $arrays); } } $two_item_array = [["abc", "def"], ["ghi", "jkl"]]; $one_item_array = [["abc", "def"]]; echo "Two arrays:\n"; print_r(array_map_userland(null, ...$two_item_array)); echo "One array:\n"; print_r(array_map_userland(null, ...$one_item_array));

preferences:
53.48 ms | 402 KiB | 5 Q