<?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));
- Output for 5.6.38, 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.27, 8.2.0 - 8.2.17, 8.3.0 - 8.3.4
- Two arrays:
- many arrays
- without callback - use array of values
Array
(
[0] => Array
(
[0] => abc
[1] => ghi
)
[1] => Array
(
[0] => def
[1] => jkl
)
)
One array:
- one array
- without callback - return copy
Array
(
[0] => abc
[1] => def
)
preferences:
196.78 ms | 404 KiB | 241 Q