Fyntik
Я пытаюсь взять несколько рандомных файлов из каталога и вывести их через include:
Код (Text):
$phpFiles = glob(‘posts/*.php’); if (empty($phpFiles) === false) { $randomFile = $phpFiles[array_rand($phpFiles)]; include($randomFile); }Но, оно выводит рандомно от 1 и до максимума, а мне нужно чтобы было 2
Когда вписываю таким образом:Код (Text):
$phpFiles = glob(‘posts/*.php’); if (empty($phpFiles) === false) { $randomFile = $phpFiles[array_rand($phpFiles, 2)]; include($randomFile); }Ошибка:
Warning: Illegal offset type in
Когда вписываю таким образом:Код (Text):
$phpFiles = glob(‘posts/*.php’); if (empty($phpFiles) === false) { $randomFile = $phpFiles[array_rand($phpFiles)]; include($randomFile[$phpFiles[2]]); }Ошибка:
Warning: Illegal string offset
Помогите пожалуйста, я не понимаю
Drunkenmunky
https://www.php.net/manual/ru/function.shuffle
https://www.php.net/manual/ru/function.array-slice.phpPHP:
Fyntik
Спасибо! Но мне нужно именно способом include, это возможно?
Drunkenmunky
Приведенный пример показывает как получить два случайных элемента массива.
Что вы с ними будете делать зависит от вас.
Fyntik
Код (Text):
$phpFiles = glob(‘posts/*.php’); shuffle($phpFiles); $slice = array_slice ($phpFiles, -1); include($slice[0]);Я сделал так, но выводит или один или два, можно ли сделать чтобы четко выводило 2?
— Добавлено —
Если ставить -2 то выводит либо 2 либо 3
Drunkenmunky
PHP:
foreach($slice as $value) { include($value); }
Fyntik
Так, возник новый вопрос, под одним индекс [0] или [1] не важно, выводит несколько файлов
Код (Text):
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):
<center><div class=»posts» style=»display: inline-block;width: 550px;»> <?php if ($dh = opendir(‘posts’)) { $posts = array(); while (($file = readdir($dh)) !== false) { if ($file != ‘.’ and $file != ‘..’ and $file != ‘…’) { $phpFiles = glob(‘posts/*.php’); shuffle($phpFiles); $slice = array_slice($phpFiles, -1); print_r(array_unique($slice)); $posts[$postDate] = array(‘category1’ => $postCategory1, ‘category2’ => $postCategory2, ‘category3’ => $postCategory3, ‘category4’ => $postCategory4, ‘name’ => $postName, ‘subtitle’ => $postSubtitle, ‘title’ => $postTitle, ‘date’ => $postDate); } } usort($posts, function ($item1, $item2) { return $item2[‘date’] <=> $item1[‘date’]; }); foreach ($posts as $post) { 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>»); } closedir($dh); } ?> </div></center>Вот весь код
Drunkenmunky
Понятно. Включаете.
Попробуйте использовать код, который я давал выше.
Fyntik
Та же ситуация
Drunkenmunky
Позвольте усомниться.
Возможно, вы его каким-то образом тоже включаете в цикл?
Fyntik
Если его не включать в цикл, то он работает отлично но он не будет выводить то, что мне нужно, то есть картинку, а если включать то работает неккоректно
— Добавлено —Теперь выводит как надо, но только один файл
— Добавлено —Код (Text):
<?php $phpFiles = glob(‘posts/*.php’); shuffle($phpFiles); $slice = array_slice($phpFiles, -3); foreach($slice as $value) { include($value); } $posts[$postDate] = array(‘category1’ => $postCategory1, ‘category2’ => $postCategory2, ‘category3’ => $postCategory3, ‘category4’ => $postCategory4, ‘name’ => $postName, ‘subtitle’ => $postSubtitle, ‘title’ => $postTitle, ‘date’ => $postDate); usort($posts, function ($item1, $item2) { return $item2[‘date’] <=> $item1[‘date’]; }); foreach ($posts as $post) { 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>»); } ?>
Drunkenmunky
Хорошо. Не будем использовать приведенный вами код, а допишем заведомо рабочий.
Откуда берется картинка?
Зачем нужно вставлять случайные скрипты?
Fyntik
Это не картинка, а пост с обложкой, он строится из массива который я скинул выше и выводится на экран, берутся они из папки, один пост — один файлик
— Добавлено —
Случайные скрипты, чтобы вывести случайные посты которые могут заинтересовать человека
Drunkenmunky
Давайте уточним — что вы называете постом?
Можно пример случайного скрипта?