2014-11-17 3 views
0

Я получаю массив (mysql_fetch_assoc()) из комнат в результате запроса mysql. Я хочу заказать этот массив «случайно», но с одним правилом. Каждый номер комнаты не может быть больше 2 выше или ниже следующего.Сортировать результат запроса случайный, но с определенными правилами (usort)

Теперь я предполагаю, что должен использовать usort, чтобы сделать это, но я не могу понять это. Я рассмотрел ряд вопросов и объяснений, но я просто не могу понять это правильно. Я уверен, что это не может быть так сложно, как в настоящее время я испытываю это ...

Это то, что я сейчас пытаюсь сделать.

shuffle($room_array); 

function cmp($a, $b){ 
    if ($a["room"] == $b["room"] || $a["room"]+2 == $b["room"]|| $a["room"]+1 == $b["room"]|| $a["room"]-2 == $b["room"]|| $a["room"]-1 == $b["room"]){ 
    return 1; 
    }else return 0; 
} 

usort($room_array, "cmp"); 

Большое спасибо!

ответ

0

Попробуйте это:

function cmp ($a, $b){ 
    return $b - $a; 
} 
usort($room_array, 'cmp'); 
+0

Спасибо за ответ! Пробовал это с помощью $ b ['room'] и ['room'], но безрезультатно. У меня есть три массива в списке. Один с номером 1, 3 или 5. Это означает, что я должен получить 1-3-5, 3-1-5 или 5-3-1, ... Однако я все еще получаю 5-1-3 или 3-1-5 иногда, с более широким разрывом, чем 2. – Jorgos

+0

@Jorgos Ответ отредактирован, пожалуйста, попробуйте сейчас. – thecodeparadox

+0

Это действительно правильное положение, но они всегда спускаются (5-3-1). Я хотел бы, чтобы порядок был случайным, так что 1-3-5 также может произойти или другие изменения, когда я расширяю базу данных. – Jorgos

Смежные вопросы