如何在两个多维数组上应用自定义函数(洗牌函数)一次?
我有这个脚本:
function customShuffle(array &$array) {
$firstElement = array_shift($array);
shuffle($array);
array_unshift($array, $firstElement);
}
$array = array(
array("Bird", "Brown", "Bear", "Bangkok", "Bat"),
array("Carrot", "Cat", "Crispy", "Cross", "Cable"),
array("All", "Apple", "Adam", "Apart", "Air")
);
array_walk($array, function (&$array) { customShuffle($array); });
shuffle($array);
,设$array2
为
$array2 = array(
array(1, 2, 3, 4, 5),
array(10, 20, 30, 40, 50),
array(100, 200, 300, 400, 500),
);
问题是customfunction
仅应用于$array
,但是如果我有另一个数组$array2
,我想同时在它上应用相同的函数customfunction
,以获得两个数组上的和谐洗牌?
类似
$array = ...
$array2 = ...
$array_keys = sub_array_keys($array);
array_walk($array_keys, function (&$array_keys) { customShuffle($array_keys); });
shuffle_assoc($array_keys);
$array = sort_sub_array_by_array($array, $array_keys);
$array2 = sort_sub_array_by_array($array2, $array_keys);
function sub_array_keys($array)
{
$result = array();
foreach($array as $key => $sub_array)
{
$result[$key] = array_keys($sub_array);
}
return $result;
}
function sort_sub_array_by_array($array, $array_keys)
{
$result = array();
foreach($array_keys as $key_1 => $sub_array_keys)
{
foreach($sub_array_keys as $key_2)
{
$result[$key_1][$key_2] = $array[$key_1][$key_2];
}
}
return $result;
}
function shuffle_assoc(&$array)
{
$keys = array_keys($array);
shuffle($keys);
foreach($keys as $key) {
$new[$key] = $array[$key];
}
$array = $new;
return true;
}