Поскажите, пожалуйста, оператор, который может перебирать все переменные в массиве и выводить их на экран по одной в случайном порядке, ни разу не повторяя, пока не переберет весь массив. И пример записи кода с этим оператором, если можно. Переменные в массиве содержат графическое изображение. Спасибо. Добавлено спустя 2 минуты 25 секунд: А, уточнение: выведя переменную, нужно ждать действия пользователя, потом выводить следующую и т.д
Re: оператор, выводящий переменные массива в случайном поряд перемешать массив Код (Text): <?php shuffle($array); и по-очереди выводить Код (Text): <?php foreach ($array as $img) ...
Re: оператор, выводящий переменные массива в случайном поряд А "shuffle" почему как оператор не выделяется цветом в notepage?
Re: оператор, выводящий переменные массива в случайном поряд а потому что не надо работать в нотепаде (если конечно notepage это notepade)
Re: оператор, выводящий переменные массива в случайном поряд Ну оооооочень полезный комментарий! Лучше бы вы дали пример работающего кода, раз уж тратите свое время на такие бесплатные консультации. <? //выше в коде определены значения переменных массива как изображения $massiv = array("$1", "$2", "$3", "$4", "$5"); shuffle($massiv); foreach ($massiv as $img) { echo ($massiv); } ?> Вот с вашей помощью написан такой код. И почему он не работает, уважаемые профи?
Re: оператор, выводящий переменные массива в случайном поряд А как сделать чтобы он выводил по одной переменной из перемешанного массива пока они не закончатся?
Re: оператор, выводящий переменные массива в случайном поряд собственно я подвис, а что же оно сейчас делает?
Re: оператор, выводящий переменные массива в случайном поряд Код выводит все переменные из массива сразу, а должен по одной: сначала первую, потом после действий пользователя, вторую...и т.д.
Re: оператор, выводящий переменные массива в случайном поряд Собственно это значит что неясно донесена мысль до коллективного разума Ибо он работает правильно, он выводит все по одному из перемешенного массива. а вот как там задумывалось насчет действий пользователя такого уговору небыло.
Re: оператор, выводящий переменные массива в случайном поряд Перечитайте мой первый пост. Там есть уточнение
Re: оператор, выводящий переменные массива в случайном поряд А тут вопрос какое-же именно действие пользователя ждать надобно? Ибо, если там не требуется перезагрузка страницы, то тогда перекладывать это все на javascript, ибо php в данном вопросе уже не помощник. Если же страница перегружается, то просто в сессии сохранять индексы уже показанных элементов, и выбирать рандомом из тех, которые еще не отображались.
Re: оператор, выводящий переменные массива в случайном поряд >Если же страница перегружается, то просто в сессии сохранять индексы уже показанных элементов, и выбирать рандомом из тех, которые еще не отображались. Пример кода, плиз
Re: оператор, выводящий переменные массива в случайном поряд Contessa, решений твоей задачи очень много. Нет смысла гадать что тебе нужно и перечислять все варианты решения. Ты просто скажи что ты хочешь получить, т.е. не саму задачу, а именно что должен увидеть пользователь и что он должен делать. Что это вообще такое: что-то типа опросника-теста? Скорее всего, я так думаю, к решению можно подойти "с другой стороны"
Re: оператор, выводящий переменные массива в случайном поряд Ну хорошо, вот тебе задача: выводим картинку (всего в массиве их больше полусотни) в случайном порядке, пользователь называет картинку (через поле input), говорим ему правильно он ответил или нет, выводим ему следующую.... по окончании теста можно и общий результат: сколько правильных ответов и сколько нет. >Что это вообще такое: что-то типа опросника-теста? Да, что-то типа теста. Какие будут идеи? С кодом, плиз.
Re: оператор, выводящий переменные массива в случайном поряд Для этого надо перемешать массив Код (Text): shuffle($array); и записать сессию Код (Text): $_SESSION['array'] = $array; при загрузке страницы извлекать первый элемент с удалением Код (Text): echo array_shift($_SESSION['array']); http://phpfaq.ru/sessions
Re: оператор, выводящий переменные массива в случайном поряд В общем вот накидал код небольшой. Всё прокомментировал. Код не старался оптимизировать, делал на скорую руку, только чтоб механизм "озвучить" Вот код: Код (Text): <?php session_start(); // Проверяем приходило ли что из формы $result = (isset($_REQUEST['result'])) ? $_REQUEST['result'] : null; $img = (isset($_REQUEST['img'])) ? $_REQUEST['img'] : null; // Проверяем, а пришло ли что-нибудь if (!is_null($result) and !is_null($img)) { // Получаем результат из сессии $itog = (isset($_SESSION['result'])) ? unserialize($_SESSION['result']) : array(); // Добавляем результат $itog[] = $img . ' - ' . $result; // Обновляем сессию с результатом $_SESSION['result'] = serialize($itog); } // Проверяем существует ли массив в сессии if (isset($_SESSION['array_img'])) { // Массив оказывается уже сформирован // униceриализуем массив из сессии $array_img = unserialize($_SESSION['array_img']); } elseif (isset($_SESSION['result'])) { // Массива уже нет или ещё нет но есть результат // Выводим результат getResult(); } else { // Мы только начали листать опросник // Получаем новый массив (скорее всего это первый вход) $array_img = getArray(); } // Если ещё существуют записи в массиве if (isset($array_img[0])) { // Получаем первый элемент массива $img = array_shift($array_img); // Проверяем массив ли это и не пустойли он if (!is_null($img)) { // Выводим форму опросника getForm($img, count($array_img)); // Смотрим сколько осталось if (count($array_img)) { // Обновляем данные $_SESSION['array_img'] = serialize($array_img); } else { // Иначе удаляем unset($_SESSION['array_img']); } } } /** * Функция выводит форму опросника * * @param $img - массив с картинками * @param $count - количество элементов в массиве */ function getForm($img, $count) { // Сама формочка ?> <form action="index.php" method="post"> <h3>Осталось: <?php echo $count;?></h3> <div> <img src="images/<?php echo $img;?>"/> </div> <div> <select name="result"> <option value="0">Нет</option> <option value="1">Да</option> </select> </div> <input type="hidden" name="img" value="<?php echo $img;?>"/> <div> <input type="submit" value="Дальше"/> </div> </form> <?php } /** * Получение массива путей картинок из папки * * @return array - массив путей картинок */ function getArray() { // Определяем постой массив $result = array(); // Определяем какие картинки искать (jpg, gif и т.п.) $ext = 'jpg'; // Получаем все картинки (пути) из каталога images $files = scandir('images'); // Оставляем в массиве нужное foreach ($files as $file) { // Проверяем имя файла $_tmp = preg_match('#(\.' . $ext . ')$#', $file); // Если оно то добавляем в массив if ($_tmp) { $result[] = $file; } } // Перемешиваем массив shuffle($result); // Возвращаем массив с путями картинок return $result; } /** * Выводим окончательный результат */ function getResult() { echo '<div><h3>Итоги:</h3><ul>'; $array_result = (isset($_SESSION['result'])) ? unserialize($_SESSION['result']) : array(); foreach ($array_result as $result) { echo '<li>' . $result . '</li>'; } echo '</ul></div>'; // Очищаем сессию unset($_SESSION['array_img']); unset($_SESSION['result']); } Теперь как запустить: - создаём в корне папку "images" - закидываем туда кучу JPEG-картинок с расширением jpg - ну и запускаем
Re: оператор, выводящий переменные массива в случайном поряд Полный бред. Такой код не будет работать и он не работает. Кто так вообще пишет?! ... ?> { <?php } ... Что за бред? Плохо работаете, программисты.
Re: оператор, выводящий переменные массива в случайном поряд Я огорчу, это не бред, это вполне себе набросок, да, спорный местами, но для примера самое то... и оно работает. Вопрос: что делаете не так?
Re: оператор, выводящий переменные массива в случайном поряд Уважаемый, мне конечно обидно, но не за то, что я потратил достаточное количество времени и написал не только ответ на Ваш вопрос, а ещё и полное решение с загрузкой данных, перемешкой массива, с возможностью участия пользователя, выводом данных и общего результата. И обидно не за то, что Вы обозвали мой код бредом. А обидно за то, что Вы на столько ленивы, что не способны посмотреть даже на этом портале просто описание на русском(!) языке функций, которые работают с массивами. Что Вы на столько неграмотны, что не способны просто понять что Вам уже ответили. И за то, что Вы настолько бездарны, что не способны просто запустить скрипт у себя, в котором я специально прокомментировал для Вас каждую строчку кода и написал что нужно сделать дополнительно чтобы он заработал (хотя по коду и так понятно), при этом утверждая что это бред и код не рабочий. Если бы Вы действительно хотели бы понять, разобраться и научиться, то просто бы задали вопрос по непонятному моменту. Вы сами ответили на то, чтобы Вам в дальнейшем помогать. И мой совет, попробуйте пересмотреть своё отношение к помощи. Добавлено спустя 6 минут 52 секунды: Re: оператор, выводящий переменные массива в случайном порядке Кстати, можно обсудить. Я когда делал, было несколько вариантов решения, но посчитал оптимальным то что написал
Re: оператор, выводящий переменные массива в случайном поряд имхо unserialize - достаточно прожорлива до времени при больших массивах, тут или уж бросать все в json, или хранить просто массивом.
Re: оператор, выводящий переменные массива в случайном поряд Да, думал над этим. Но не уверен что json оптимальнее. Нужно тесты проводить.. У меня была мысль сделать отдельный каталог для сессий и хранить всё в INI-файлах. Проводил тесты, скорость обработки просто бешеная, а сама обработка просто элементарная. А вот при работе с сессиями, действительно есть минус. Например если действие будет выбрано не пользователем или если браузер закроется или нужно вернуться назад.. В общем, у ini-файла много преимуществ. Была мысль завязать на базу, но это уже если сам проект использует базу, тогда стоит заморачиваться. А так просто усложнять получится
Re: оператор, выводящий переменные массива в случайном поряд сделал тестик и сравнил json и serialize а последнее быстрее вот как проверял Код (Text): $array = array(); for($i = 0; $i < 100000; $i++){ $array[] = 'Тестовое содержание массива - '. $i; } /***************************************************************************************/ echo "<hr><h1>Загрузка (serialize)</h1>"; $sys = microtime(true); $res = serialize($array); echo '<div>Скорость: ' . round((microtime(true) - $sys), 5) . '</div>'; /***************************************************************************************/ echo "<hr><h1>Выгрузка (unserialize)</h1>"; $sys = microtime(true); $res = unserialize($res); echo '<div>Скорость: ' . round((microtime(true) - $sys), 5) . '</div>'; /***************************************************************************************/ echo "<hr><h1>Загрузка (json_encode)</h1>"; $sys = microtime(true); $res = json_encode($array); echo '<div>Скорость: ' . round((microtime(true) - $sys), 5) . '</div>'; /***************************************************************************************/ echo "<hr><h1>Выгрузка (json_decode)</h1>"; $sys = microtime(true); $res = json_decode($res); echo '<div>Скорость: ' . round((microtime(true) - $sys), 5) . '</div>'; Вот результат: Загрузка (serialize) Скорость: 0.25258 Выгрузка (unserialize) Скорость: 0.04428 Загрузка (json_encode) Скорость: 1.04991 Выгрузка (json_decode) Скорость: 0.33548
Re: оператор, выводящий переменные массива в случайном поряд прогони миллион сериалайз будет быстрее немного, а вот в обратную сторону очень медленнее.