Я пытаюсь взять несколько рандомных файлов из каталога и вывести их через 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 Помогите пожалуйста, я не понимаю
https://www.php.net/manual/ru/function.shuffle https://www.php.net/manual/ru/function.array-slice.php PHP: $phpFiles = glob('posts/*.php'); shuffle($phpFiles); print_r ( array_slice ($phpFiles, -2));
Приведенный пример показывает как получить два случайных элемента массива. Что вы с ними будете делать зависит от вас.
Код (Text): $phpFiles = glob('posts/*.php'); shuffle($phpFiles); $slice = array_slice ($phpFiles, -1); include($slice[0]); Я сделал так, но выводит или один или два, можно ли сделать чтобы четко выводило 2? --- Добавлено --- Если ставить -2 то выводит либо 2 либо 3
PHP: $phpFiles = glob('posts/*.php'); shuffle($phpFiles); $slice = array_slice ($phpFiles, -2); foreach($slice as $value) { include($value); }
Так, возник новый вопрос, под одним индекс [0] или [1] не важно, выводит несколько файлов Код (Text): Array ( [0] => posts/wizzard.php ) Array ( [0] => posts/123123.php ) Array ( [0] => posts/wizzard.php ) Возможно ли урезать кол-во индексов? --- Добавлено --- Не удаляя файлов из каталога
Это я просто вывел через print_r print_r(array_slice ($phpFiles, -1)); и мне показало как массив выглядит --- Добавлено --- Мне бы желательно чтобы было под индексом [0] только два файла
Код (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[title]</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> Вот весь код
Если его не включать в цикл, то он работает отлично но он не будет выводить то, что мне нужно, то есть картинку, а если включать то работает неккоректно --- Добавлено --- Теперь выводит как надо, но только один файл --- Добавлено --- Код (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[title]</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>"); } ?>
Хорошо. Не будем использовать приведенный вами код, а допишем заведомо рабочий. Откуда берется картинка? Зачем нужно вставлять случайные скрипты?
Это не картинка, а пост с обложкой, он строится из массива который я скинул выше и выводится на экран, берутся они из папки, один пост - один файлик --- Добавлено --- Случайные скрипты, чтобы вывести случайные посты которые могут заинтересовать человека
Можно ещё вывести два последних поста т.е. два последних файла по дате создания, возможно так даже будет проще --- Добавлено --- Пост как в блоге --- Добавлено --- Это единственный который не получается создать
Ну это первый скрипт в блоге, на случайность --- Добавлено --- Кстати на счёт того вашего скрипта, если выводить через print_r то выводит posts/1111.phpposts/123123.php, но если include то выводит только один
Их содержимое это случайный файл в котором содержится Пост из блога который я создал заранее --- Добавлено --- posts/123123.phpposts/wizzard.php Как это разбить на два?