# dilp (31.05.2017 / 01:39)
Меня смущает применение сессии, её ведь можно как-то подделать и повлиять на выборку?
Нет, недостаток только в том, что если закрыть браузер, то данные в сессии обнулятся. Поэтому лучше заменить сессии на базу данных или текстовый файл
(если описанная причина не желательна).
Почему нельзя заменить на глобальную переменную?
# dilp (31.05.2017 / 01:52)
Почему нельзя заменить на глобальную переменную?
Чем глобальная переменная отличается от локальной переменной? -- Допустим, записал ты что-то в $GLOBALS. Запустил скрипт, и в $GLOBALS снова произошла инициализация. Не? А тебе надо, чтобы значение хранилось между запросами, а не инициализировалось при каждом старте скрипта.
Да,точно ))
А зачем вообще тут сохранение ?
# dilp (31.05.2017 / 01:58)
Да,точно ))
А зачем вообще тут сохранение ?
Ну а циферки в массиве где держать? Они же уменьшаться должны при каждом обращении к скрипту. Вот и выходит, что инициализируем мы массив один раз :
$r = [
'alfa' => 3,
'beta' => 9,
'gamma' => 0,
'delta' => 6
];
// Сохранили массив
$_SESSION['freak'] = $r;
А все последующие обращения к скрипту мы работаем уже с сессией (рандомно уменьшаем значения массива, пока он не станет пуст -- после снова инициализируем массив и сохраняем в сессию)
Получается пока все шарики из мешка не вытащить , новых шариков в мешке не появится. Хм,а у меня динамичный набор величин, а я думаю - почему как-то не так работает.
# dilp (31.05.2017 / 02:17)
Получается пока все шарики из мешка не вытащить , новых шариков в мешке не появится. Хм,а у меня динамичный набор величин, а я думаю - почему как-то не так работает.
Если исходный массив у тебя подвержен изменениям, тогда можно добавить условие с проверкой на соответствие массивов - если массивы не равны, перезаписывать сессию.
# dilp (31.05.2017 / 02:17)
Хм,а у меня динамичный набор величин...
Вот вариант для динамических массивов:
* (+/-)
/*
Попробуй добавлять/удалять пары
'ключ' => число
в исходном массиве $r
*/
session_id() ?: session_start();
$r = [
'alfa' => 3,
'beta' => 9,
'gamma' => 0,
'delta' => 6
];
echo 'Выбрана картинка с id: '. findRandKey($r);
function findRandKey($r) {
$m = (empty($_SESSION['m']) ? ($_SESSION['m'] = $r) : $_SESSION['m']);
$i = (count($r) > count($m) ? array_diff_key($r,$m) : array_diff_key($m,$r));
empty($i) ?: $_SESSION['freak'] = $_SESSION['m'] = $r;
do {
if (!empty($_SESSION['freak'])) {
$a = &$_SESSION['freak'];
$k = array_rand($a);
empty($a[$k]) ?: --$a[$k];
if ($a[$k] < 1) {
unset($a[$k]);
}
} else {
$_SESSION['freak'] = $r;
}
} while (empty($k) || empty($a[$k]));
return $k;
}