Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "Прочее";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.01 c
2-1149362980
barzini
2006-06-03 23:29
2006.06.25
Дипломная. БД. Хелп.


3-1145970480
Untermensch
2006-04-25 17:08
2006.06.25
TSQLDataSet (DBExpress) ругается на поля типа timestamp


2-1149644505
Никос
2006-06-07 05:41
2006.06.25
Типы


15-1148872897
DmiSb
2006-05-29 07:21
2006.06.25
Можно ли уменьшить размер vcl50.bpl ,


15-1149178238
Зм1й
2006-06-01 20:10
2006.06.25
Принтер Epson Photo R800





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский