За последние 24 часа нас посетили 20999 программистов и 1106 роботов. Сейчас ищут 447 программистов ...

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

Тема в разделе "PHP для новичков", создана пользователем Fyntik, 26 янв 2021.

Метки:
  1. Fyntik

    Fyntik Новичок

    С нами с:
    5 июн 2020
    Сообщения:
    38
    Симпатии:
    0
    Я пытаюсь взять несколько рандомных файлов из каталога и вывести их через 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
    Помогите пожалуйста, я не понимаю
     
  2. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
  3. Fyntik

    Fyntik Новичок

    С нами с:
    5 июн 2020
    Сообщения:
    38
    Симпатии:
    0
  4. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Приведенный пример показывает как получить два случайных элемента массива.
    Что вы с ними будете делать зависит от вас.
     
  5. Fyntik

    Fyntik Новичок

    С нами с:
    5 июн 2020
    Сообщения:
    38
    Симпатии:
    0
    Код (Text):
    1. $phpFiles = glob('posts/*.php');
    2.                                     shuffle($phpFiles);
    3.                                     $slice = array_slice ($phpFiles, -1);
    4.                                     include($slice[0]);
    Я сделал так, но выводит или один или два, можно ли сделать чтобы четко выводило 2?
    --- Добавлено ---
    Если ставить -2 то выводит либо 2 либо 3
     
  6. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    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. }
     
  7. Fyntik

    Fyntik Новичок

    С нами с:
    5 июн 2020
    Сообщения:
    38
    Симпатии:
    0
    Так, возник новый вопрос, под одним индекс [0] или [1] не важно, выводит несколько файлов
    Код (Text):
    1. Array ( [0] => posts/wizzard.php ) Array ( [0] => posts/123123.php ) Array ( [0] => posts/wizzard.php )
    Возможно ли урезать кол-во индексов?
    --- Добавлено ---
    Не удаляя файлов из каталога
     
  8. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Это после каких манипуляций?
     
  9. Fyntik

    Fyntik Новичок

    С нами с:
    5 июн 2020
    Сообщения:
    38
    Симпатии:
    0
    Это я просто вывел через print_r
    print_r(array_slice ($phpFiles, -1));
    и мне показало как массив выглядит
    --- Добавлено ---
    Мне бы желательно чтобы было под индексом [0] только два файла
     
  10. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Попробую повторить.
    Напишу.
     
  11. Fyntik

    Fyntik Новичок

    С нами с:
    5 июн 2020
    Сообщения:
    38
    Симпатии:
    0
    Хорошо, буду ждать, спасибо
     
  12. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Не удалось.
    А не включаете ли вы print_r(array_slice ($phpFiles, -1)); внутрь цикла?
     
  13. Fyntik

    Fyntik Новичок

    С нами с:
    5 июн 2020
    Сообщения:
    38
    Симпатии:
    0
    Код (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[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>");
    19.                             }
    20.                             closedir($dh);
    21.                         }
    22.                         ?>
    23.                     </div></center>
    Вот весь код
     
  14. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Понятно. Включаете.
    Попробуйте использовать код, который я давал выше.
     
  15. Fyntik

    Fyntik Новичок

    С нами с:
    5 июн 2020
    Сообщения:
    38
    Симпатии:
    0
    Та же ситуация
     
  16. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Позвольте усомниться.
    Возможно, вы его каким-то образом тоже включаете в цикл?
     
  17. Fyntik

    Fyntik Новичок

    С нами с:
    5 июн 2020
    Сообщения:
    38
    Симпатии:
    0
    Если его не включать в цикл, то он работает отлично но он не будет выводить то, что мне нужно, то есть картинку, а если включать то работает неккоректно
    --- Добавлено ---
    Теперь выводит как надо, но только один файл
    --- Добавлено ---
    Код (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[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>");
    15.                             }
    16.                         ?>
     
  18. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Хорошо. Не будем использовать приведенный вами код, а допишем заведомо рабочий.
    Откуда берется картинка?
    Зачем нужно вставлять случайные скрипты?
     
  19. Fyntik

    Fyntik Новичок

    С нами с:
    5 июн 2020
    Сообщения:
    38
    Симпатии:
    0
    Это не картинка, а пост с обложкой, он строится из массива который я скинул выше и выводится на экран, берутся они из папки, один пост - один файлик
    --- Добавлено ---
    Случайные скрипты, чтобы вывести случайные посты которые могут заинтересовать человека
     
  20. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Давайте уточним - что вы называете постом?
    Можно пример случайного скрипта?
     
  21. Fyntik

    Fyntik Новичок

    С нами с:
    5 июн 2020
    Сообщения:
    38
    Симпатии:
    0
    Можно ещё вывести два последних поста т.е. два последних файла по дате создания, возможно так даже будет проще
    --- Добавлено ---
    Пост как в блоге
    --- Добавлено ---
    Это единственный который не получается создать
     
  22. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Извините, недопонял.
     
  23. Fyntik

    Fyntik Новичок

    С нами с:
    5 июн 2020
    Сообщения:
    38
    Симпатии:
    0
    Ну это первый скрипт в блоге, на случайность
    --- Добавлено ---
    Кстати на счёт того вашего скрипта, если выводить через print_r то выводит posts/1111.phpposts/123123.php, но если include то выводит только один
     
  24. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    Вот я и пытаюсь вас спросить что эти скрипты делают. Их содержимое.
     
  25. Fyntik

    Fyntik Новичок

    С нами с:
    5 июн 2020
    Сообщения:
    38
    Симпатии:
    0
    Их содержимое это случайный файл в котором содержится Пост из блога который я создал заранее
    --- Добавлено ---
    posts/123123.phpposts/wizzard.php
    Как это разбить на два?