Вниз
Скачать: CL | DM;

PHP: выборка из массива   Найти похожие ветки 

← →
dancer ©   (2006-06-01 04:33) [0]

Есть массив, например,


$qu = array ("one","two","three","four","five");


Как организовать случайную выборку элементов, но чтобы выбранные элементы уже не выберались! Конечно, можно создать еще один массив и туда заносить выбранные элементы а потом сравнивать, но может есть более конструктивное решение?


← →
dancer ©   (2006-06-01 04:34) [1]

Забыл, массив многомерный=)


← →
vidiv ©   (2006-06-01 04:42) [2]

Можно перемешать значения (array_shuffle помоему) и по порядочку вытаскивать оттуда array_pop


← →
dancer ©   (2006-06-01 04:57) [3]

Вот так?

<?php
$qu = array_shuffle($qu);

foreach($qu as $a=>$b) {
   print $a;
   print "<br>";
   print $b;
}
?>


← →
vidiv ©   (2006-06-01 05:06) [4]

я чуток перепутал, функция назвается shuffle
<?php

shuffle($qu);

foreach($qu as $a=>$b) {
  print $a;
  print "<br>";
  print $b;
}
?>

ps: функция не сохраняет индексы массива, а пронумеровывает их по порядку в перемешанном массиве


← →
vidiv ©   (2006-06-01 05:09) [5]

чтобы сохранить ключи, можно сделать так:

$arr = array("one", "a"=>"two", "b"=>"tree", "four");

$arr_keys = array_keys($arr);
shuffle($arr_keys);
for ($i=0; $i<count($arr_keys); $i++) {
echo $arr_keys[$i]; // ключ
echo $arr[$arr_key[$i]]; // значение
}

Для того чтобы перемешать значения во всех измерениях массива, то нужно писать рекурсивную функцию


← →
TButton ©   (2006-06-01 06:05) [6]

топорный подход
1) продублировать массив (сделать копию), если сохранность исходного массива критична
2) перетассовать (shuffle) копию. (я так делал, когда писал на ОП объект реализующий колоду карт) банальной перестановкой двух случайных элементов несколько раз. т.е. делается цикл который на каждой итерации выбирает два случайных элемента и меняет их местами. больше итераций - больше разнообразие.
3) вывести перетассованый массив.

* за орфографию слова "тассовать" не ручаюсь =) поэтому считать все включения этого слова - аналогом английского shuffle



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.023 c
2-1149582114
XTD
2006-06-06 12:21
2006.06.25
procedure TForm1.FormCreate(Sender: TObject); Параметры формы


8-1138024197
Змей
2006-01-23 16:49
2006.06.25
название трека


15-1148843112
@BraIN
2006-05-28 23:05
2006.06.25
Offtop: где почитать о разработке, согласовании и утверждении...


3-1146031721
{Set}
2006-04-26 10:08
2006.06.25
Ошибка при подключении Таблици InterBase


15-1149154067
Александр Б.
2006-06-01 13:27
2006.06.25
Шаблоны




   Наверх