Как сделать random вывод из массива?

S
На сайте с 30.09.2009
Offline
116
9123

Ребят, нужна помощь.

Есть папка с моделями. Смог сделать php код который подгружается в каждую страницу моделей и выводит ссылки все на остальные модели, которые лежат в этой же папке.

1. как сделать на на все остальные, а на случайные 2 или 3?

2. как сделать так чтобы код открывал не папку modeli и сканировал на наличие файлов, а открывал конкретный файл (расположу в любом месте) где будут заранее забиты все полные пути к моделям? сответственно в масив будут забиваться полные пути (http://...) и потом случайно выводиться юзеру 2-3 ссылки.

Вот код который я смог реализовать


<?php
//массив в котором будем хранить названия файлов
$files = array();
//Указываем рабочую папку по умолчанию
$url = '../modeli';
//Проверяем, является ли директорией
if (is_dir($url)) {
//Проверяем, была ли открыта директория
if ($dir = opendir($url)) {
//Сканируем директорию
while (false !== ($file = readdir($dir))){
//Убираем лишние элементы а именно не берем внутренние директории
if ($file != '.' && $file != '..') {

// Добавим полученный файл в массив
$files[] = $file;
}
}
//Закрываем директорию
closedir($dir);
}
}

//сортируем названия файлов
if (sort($files)) {
foreach ($files as $value) {
$file = $value;
echo "<a href='$file'>$file</a> | ";

}
?>

Спасибо заранее, надеюсь на помощь.

Перелинковку сделал. Теперь думаю куда потратить денежки - сапа, мира или блоги :)
K
На сайте с 24.10.2007
Offline
28
#1

ответ на первый вопрос:


$rand_files = shuffle($files);
//1-й элемент случайной выборки
$elem1 = $rand_files[0];
//2-й элемент случайной выборки
$elem2 = $rand_files[1];

или


$rand_files = shuffle($files);
//обрезаем перемешанный массив до двух первых элементов
$rand_files = array_slice($rand_files, 0, 2);
Самый полный справочник предприятий Харькова (http://www.infohr.com.ua/)
S
На сайте с 30.09.2009
Offline
116
#2

Да, спасибо. 2-й вопрос частично решил. Файл открываю, записываю в массив, сортирую по имени строки (в файле в строке прописан путь адреса к модели). Т.е. всё что нужно уже в массиве есть.

Нашел вот такую случайную выборку из массива, но если я понял, то это относится только к небольшому массиву.


6) Случайный элемент массива

Если имеется готовый массив, из которого необходимо вывести один случайный элемент, для этого необязательно перемешивать весь массив при помощи функции shuffle(), достаточно сгенерировать случайный индекс массива:

<?php
// Определяем массив
$arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Генерируем случайный индекс массива
$index = rand(0,count($arr) - 1);
// Выводим случайный элемент массива
echo $arr[$index];
?>


stroydomen добавил 30.03.2011 в 15:52

kapollo, не получается вашим методом, прошу помочь


<?php
//массив в котором будем хранить названия файлов
$files = array();
$fp = fopen("counter.txt", "r"); // Открываем файл в режиме чтения
if ($fp)
{
while (!feof($fp))
{
$mytext = fgets($fp, 999);
// Добавим полученный файл в массив
$files[] = $mytext;
}
}
else echo "Ошибка при открытии файла";
fclose($fp);

$rand_files = shuffle($files);
//1-й элемент случайной выборки
$elem1 = $rand_files[0];
//2-й элемент случайной выборки
$elem2 = $rand_files[1];
echo $elem1."<br />";
echo $elem2."<br />";
?>
R5
На сайте с 22.03.2010
Offline
24
#3
S
На сайте с 30.09.2009
Offline
116
#4

Всем спасибо, ребят, сделал так вроде все работает.

Может кому пригодится - выкладываю.


<?php
$arr = file("counter.txt");
for($i = 0; $i < count($arr); $i++)
{
echo $arr[$i]."<br />";
}

$index = rand(0,count($arr) - 1);
$index2 = rand(0,count($arr) - 1);
// Выводим случайный элемент массива
echo "<br />" .$arr[$index]."<br />";
echo $arr[$index2];

?>

осталось только доделать чтобы $index не был одинаковым с $index2

R5
На сайте с 22.03.2010
Offline
24
#5

$keys = array_rand($arr, 2);

foreach ($keys as $key) {

printf('<br />%s<br />', $arr[$key]);

}

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий