0

カスタム関数 (シャッフル関数) を 2 つの多次元配列に一度適用するにはどうすればよいですか?

私はこのスクリプトを持っています:

    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他の配列があった場合はどうでしょうか?$array2customfunction

4

1 に答える 1

0

みたいな

$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;
}
于 2013-05-31T19:29:05.510 に答える