<?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