Как я мог исключить определенный элемент в массивах, которые я рандомизировал с помощью функции Shuffle?

Как я мог исключить определенный элемент в многомерных массивах, которые я рандомизировал с помощью функции Shuffle?

Предположим, что у меня есть этот скрипт:

$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) { shuffle($array); });
shuffle($array);

Этот скрипт даст мне перетасованные массивы по вертикали и перетасованные элементы в каждом массиве.

Что мне нужно, так это исключить первый элемент (позиция 0) для каждого массива, как я могу это сделать, пожалуйста?


person MRAN    schedule 24.05.2013    source источник
comment
Вы имеете в виду удалить позицию 0 каждого подмассива?   -  person Frederico Schardong    schedule 25.05.2013
comment
просто удалите первый элемент из каждого подмассива (array_shift()) перед перемешиванием. Затем добавьте этот элемент обратно, если это необходимо (array_unshift()).   -  person Mike Brant    schedule 25.05.2013
comment
@ Фредерико Шардонг: Да, но временно после завершения перетасовки.   -  person MRAN    schedule 25.05.2013
comment
@ Майк Брант: У Нико есть похожее предложение в качестве ответа, но это может работать для массива, а не для многомерного массива ..!   -  person MRAN    schedule 25.05.2013


Ответы (1)


Очевидное решение примерно такое:

// Remove and store the first element in a temporary variable
$firstElement = array_shift($array);

// Shuffle the remaining items
shuffle($array);

// Re-add (prepend) the original first item
array_unshift($array, $firstElement);

Это можно легко применить к вашему конкретному примеру:

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")
);

                                         // vvvvv //
array_walk($array, function (&$array) { customShuffle($array); });
shuffle($array);  // use "customShuffle" as well if needed
person Niko    schedule 24.05.2013
comment
Как я мог бы это сделать, если бы у меня был многомерный массив, пожалуйста? Мне нужно сдвинуть только первое значение каждого вложенного массива. Спасибо. - person MRAN; 25.05.2013
comment
@m.rizeg Все, что вам нужно сделать, это применить описанный шаблон к перетасовке - я добавил пример в свой ответ. - person Niko; 25.05.2013
comment
Желаю тебе всего наилучшего.. :) - person MRAN; 25.05.2013
comment
Помог бы мне в той же теме, но с другой проблемой здесь goo.gl/Sbthb .. Спасибо. - person MRAN; 31.05.2013