Не могу понять как работает array_rand

Fyntik

Я пытаюсь взять несколько рандомных файлов из каталога и вывести их через include:

Код (Text):
  1. $phpFiles = glob(‘posts/*.php’); if (empty($phpFiles) === false) { $randomFile = $phpFiles[array_rand($phpFiles)]; include($randomFile); }

Но, оно выводит рандомно от 1 и до максимума, а мне нужно чтобы было 2
Когда вписываю таким образом:

Код (Text):
  1. $phpFiles = glob(‘posts/*.php’); if (empty($phpFiles) === false) { $randomFile = $phpFiles[array_rand($phpFiles, 2)]; include($randomFile); }

Ошибка:
Warning: Illegal offset type in
Когда вписываю таким образом:

Код (Text):
  1. $phpFiles = glob(‘posts/*.php’); if (empty($phpFiles) === false) { $randomFile = $phpFiles[array_rand($phpFiles)]; include($randomFile[$phpFiles[2]]); }

Ошибка:
Warning: Illegal string offset
Помогите пожалуйста, я не понимаю

 

Drunkenmunky

Fyntik

Drunkenmunky

Приведенный пример показывает как получить два случайных элемента массива.
Что вы с ними будете делать зависит от вас.

 

Fyntik

Код (Text):
  1. $phpFiles = glob(‘posts/*.php’);
  2.                                     shuffle($phpFiles);
  3.                                     $slice = array_slice ($phpFiles, -1);
  4.                                     include($slice[0]);

Я сделал так, но выводит или один или два, можно ли сделать чтобы четко выводило 2?
— Добавлено —
Если ставить -2 то выводит либо 2 либо 3

 

Drunkenmunky

PHP:
  1. $phpFiles = glob(‘posts/*.php’);
  2. shuffle($phpFiles);
  3. $slice = array_slice ($phpFiles, 2);
  4. foreach($slice as $value)
  5. {
  6. include($value);
  7. }
 

Fyntik

Так, возник новый вопрос, под одним индекс [0] или [1] не важно, выводит несколько файлов

Код (Text):
  1. Array ( [0] => posts/wizzard.php ) Array ( [0] => posts/123123.php ) Array ( [0] => posts/wizzard.php )

Возможно ли урезать кол-во индексов?
— Добавлено —
Не удаляя файлов из каталога

 

Drunkenmunky

Это после каких манипуляций?

 

Fyntik

Это я просто вывел через print_r
print_r(array_slice ($phpFiles, -1));
и мне показало как массив выглядит
— Добавлено —
Мне бы желательно чтобы было под индексом [0] только два файла

 

Drunkenmunky

Попробую повторить.
Напишу.

 

Fyntik

Хорошо, буду ждать, спасибо

 

Drunkenmunky

Не удалось.
А не включаете ли вы print_r(array_slice ($phpFiles, -1)); внутрь цикла?

 

Fyntik

Код (Text):
  1. <center><div class=»posts» style=»display: inline-block;width: 550px;»>
  2.                         <?php
  3.                         if ($dh = opendir(‘posts’)) {
  4.                             $posts = array();
  5.                             while (($file = readdir($dh)) !== false) {
  6.                                 if ($file != ‘.’ and $file != ‘..’ and $file != ‘…’) {
  7.                                     $phpFiles = glob(‘posts/*.php’);
  8.                                     shuffle($phpFiles);
  9.                                     $slice = array_slice($phpFiles, -1);
  10.                                     print_r(array_unique($slice));
  11.                                     $posts[$postDate] = array(‘category1’ => $postCategory1, ‘category2’ => $postCategory2, ‘category3’ => $postCategory3, ‘category4’ => $postCategory4, ‘name’ => $postName, ‘subtitle’ => $postSubtitle, ‘title’ => $postTitle, ‘date’ => $postDate);
  12.                                 }
  13.                             }
  14.                             usort($posts, function ($item1, $item2) {
  15.                                 return $item2[‘date’] <=> $item1[‘date’];
  16.                             });
  17.                             foreach ($posts as $post) {
  18.                                 echo («<div class=»post»><span id=»postSubtitle»>» . $Extra->text($post[«subtitle»]) . «</span><br><h2><a href=»posts/» . str_replace(‘.php’, », create_slug($post[«name»])) . «»>$postНе могу понять как работает array_rand</a></h2>» . «<div id=»postSubtitle»><font color=#75c1ff>» . $post[«category1»] . «</font> » . «<font color=#ffa500>» . $post[«category2»] . «</font> » . «<font color=#ffc0cb>» . $post[«category3»] . «</font> » . «<font color=#ff0000>» . $post[«category4»] . «</font> » . date(‘d.m.y’, $post[«date»]) . «</div></div></div>»);
  19.                             }
  20.                             closedir($dh);
  21.                         }
  22.                         ?>
  23.                     </div></center>

Вот весь код

 

Drunkenmunky

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

 

Fyntik

Та же ситуация

 

Drunkenmunky

Позвольте усомниться.
Возможно, вы его каким-то образом тоже включаете в цикл?

 

Fyntik

Если его не включать в цикл, то он работает отлично но он не будет выводить то, что мне нужно, то есть картинку, а если включать то работает неккоректно
— Добавлено —

Теперь выводит как надо, но только один файл
— Добавлено —

Код (Text):
  1. <?php
  2.                         $phpFiles = glob(‘posts/*.php’);
  3.                                     shuffle($phpFiles);
  4.                                     $slice = array_slice($phpFiles, -3);
  5.                                     foreach($slice as $value)
  6.                                     {
  7.                                     include($value);
  8.                                     }
  9.                                     $posts[$postDate] = array(‘category1’ => $postCategory1, ‘category2’ => $postCategory2, ‘category3’ => $postCategory3, ‘category4’ => $postCategory4, ‘name’ => $postName, ‘subtitle’ => $postSubtitle, ‘title’ => $postTitle, ‘date’ => $postDate);
  10.                                     usort($posts, function ($item1, $item2) {
  11.                                 return $item2[‘date’] <=> $item1[‘date’];
  12.                             });
  13.                             foreach ($posts as $post) {
  14.                                 echo («<div class=»post»><span id=»postSubtitle»>» . $Extra->text($post[«subtitle»]) . «</span><br><h2><a href=»posts/» . str_replace(‘.php’, », create_slug($post[«name»])) . «»>$postНе могу понять как работает array_rand</a></h2>» . «<div id=»postSubtitle»><font color=#75c1ff>» . $post[«category1»] . «</font> » . «<font color=#ffa500>» . $post[«category2»] . «</font> » . «<font color=#ffc0cb>» . $post[«category3»] . «</font> » . «<font color=#ff0000>» . $post[«category4»] . «</font> » . date(‘d.m.y’, $post[«date»]) . «</div></div></div>»);
  15.                             }
  16.                         ?>
 

Drunkenmunky

Хорошо. Не будем использовать приведенный вами код, а допишем заведомо рабочий.
Откуда берется картинка?
Зачем нужно вставлять случайные скрипты?

 

Fyntik

Это не картинка, а пост с обложкой, он строится из массива который я скинул выше и выводится на экран, берутся они из папки, один пост — один файлик
— Добавлено —
Случайные скрипты, чтобы вывести случайные посты которые могут заинтересовать человека

 

Drunkenmunky

Давайте уточним — что вы называете постом?
Можно пример случайного скрипта?

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *