[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Перемешать массив
Страницы: 1, 2
savelikan
Привет всем! Нужно перемешать массив рандомно, но сохранить ключи.
Например, чтоб из этого:
$array = array(
"1" => "text 1",
"2" => "text 2",
"3" => "text 3",
"4" => "text 4"
);


получилось так:
$array = array(
"2" => "text 2",
"1" => "text 1",
"4" => "text 4",
"3" => "text 3"
);

Помогите, пожалуйста)

_____________
Одесса - мой город!)))
Valick
Цитата
Нужно перемешать массив рандомно, но сохранить ключи.

сама по себе задача безумна

_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
savelikan, а какая вообще конечная цель?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Hello
function shuffle_assoc(array &$in) {
$result = array();
while ($key = array_rand($in)) {
$result[$key] = $in[$key];
unset($in[$key]);
}
$in = $result;
}


_____________
VPS от 5$, первые 2 месяца - бесплатно.
savelikan
Спасибо! Помогло!)

_____________
Одесса - мой город!)))
Valick
savelikan, вообще-то не за что. Если задача имеет идиотизмическое решение, то скорее всего ошЫбка была допущена еще раньше на уровне логики. Вы зря проигнорировали вопрос от sergeiss.

_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
Цитата (Valick @ 30.12.2014 - 16:40)
Вы зря проигнорировали вопрос от sergeiss.

Не будь мелочным smile.gif Ведь "помогло" же. А будут другие проблемы, так он и будет их решать по мере поступления. Зачем сразу продумывать всё вперед?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Valick
Цитата
А будут другие проблемы, так он и будет их решать по мере поступления

это уже будут не решения, а костыли...
ну раз мелочным так мелочным (хотя лично для меня логическая ошибка, это как раз не мелочи, логика - это и есть программирование), мне пофиг

_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
Цитата (Valick @ 30.12.2014 - 20:23)
это уже будут не решения, а костыли...

Ну так да smile.gif

Вот эти мои слова
Цитата (sergeiss @ 30.12.2014 - 19:01)
Зачем сразу продумывать всё вперед?

были сарказмом как раз по поводу грядущего "костыления".

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
mvg
Цитата (Hello @ 30.12.2014 - 13:29)
function shuffle_assoc(array &$in) {
$result = array();
while ($key = array_rand($in)) {
$result[$key] = $in[$key];
unset($in[$key]);
}
$in = $result;
}

1) Что если $key = array_rand($in) станет false до того как заполниться массив $result?
Т.е. я хотел сказать что алгоритм не оптимальный.

2) Воспользуйся функцией shuffle. Там по ссылке есть еще примеры подходящие:

<?php
function
shuffle_assoc(&$array) {
$keys = array_keys($array);

shuffle($keys);

foreach($keys as $key) {
$new[$key] = $array[$key];
}

$array = $new;

return true;
}
?>
savelikan
ДА все те же тесты делаю. Но другого типа.
Они сохраняються в базе: поле вопрос и ответы, каждая строка - новый ответ
Через explode разбиваю на строки как отдельный ответ.
Но нужно помнить ключи, чтоб засутуть их в INPUT (например 1-4-2-3)
А на странице результатов по них узнать в какой последовательности они были.
такой дже ИНПУТ и для вопросов, чтоб знать, какие 20вопросов из 100 было отображены.

логика - говно, но зато максимальное быстродействия.
Или вы предложыте что-то лучше?

_____________
Одесса - мой город!)))
Valick
не, походу дела вам всё-таки нужно наступить на грабли, пусть лучше в этих тестах
смачный "удар в лоб", будет гораздо эффективнее всех наших советов biggrin.gif

_____________
Стимулятор ~yoomoney - 41001303250491
savelikan
Цитата (Valick @ 30.12.2014 - 22:39)
не, походу дела вам всё-таки нужно наступить на грабли, пусть лучше в этих тестах
смачный "удар в лоб", будет гораздо эффективнее всех наших советов biggrin.gif

Ну а если в двух словах - какая логика должна быть?

_____________
Одесса - мой город!)))
Valick
savelikan, ну если в двух словах, то вам необходимо выучить "Правила нормализации БД". И основы построения реляционных баз данных.
первая таблица quest минимум два поля
q_id - идентификатор строки вопроса (авто инкремент)
q_qu - вопрос
далее можно создать поля автор, дата, и тд.

вторая таблица answer минимум 4 поля
a_id - идентификатор строки ответа (авто инкремент)
q_id - идентификатор вопроса
a_ri - флаг ответа 0 -неправильный, 1 - правильный
a_an - ответ

естественно еще должны быть таблицы пользователей и их ответов

_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.