Сортировка массива с использованием usort? - PullRequest
0 голосов
/ 14 ноября 2011

У меня проблема с попыткой сортировки массива - я хочу, чтобы все значения IsOpen = 1 отображались вверху?

Пример:

Array
(
    [0] => Array
        (
            [Isopen] => 0
        )

    [2] => Array
        (
            [Isopen] => 1
        )

    [3] => Array
        (
            [Isopen] => 0
        )

    [4] => Array
        (
            [Isopen] => 1
        )

Код:

   function cmp($a, $b) {
        if ($a['Isopen'] >= $b['Isopen']) {
            return 0;
        }
    }

    usort($data['rowResult'], "cmp");

Я не понимаю, что означают $ a и $ b, я посмотрел документацию по PHP - информация не ясна.

Ответы [ 6 ]

3 голосов
/ 14 ноября 2011

$ a и $ b - элементы для сравнения:

function cmp($a, $b) {
    if ($a['Isopen'] == $b['Isopen']) {
        return 0;
    }
    return ($a['Isopen'] > $b['Isopen']) ? -1 : 1;
}
1 голос
/ 14 ноября 2011
function cmp($a, $b) {
        if ($a['Isopen'] == $b['Isopen']) {
            return 0;
        }
        return ($a['Isopen'] >  $b['Isopen']) ? -1 : 1;
    }

это сделает Isopen = 1 в конце массива, если вы хотите, чтобы в начале запроса было сделано

 function cmp($a, $b) {
            if ($a['Isopen'] == $b['Isopen']) {
                return 0;
            }
            return ($a['Isopen'] <  $b['Isopen']) ? -1 : 1;
        }
1 голос
/ 14 ноября 2011

Функция cmp должна возвращать 0, -1 (или меньше нуля) или 1 (или больше нуля).

  • ноль, если два значения равны.
  • больше нуля, если значение формы a больше.
  • меньше нуля, если значение от b выше.

для сравнения двух значений вы можете использовать функцию php strcmp

function cmp($a, $b) {
  return strcmp($a['Isopen'], $b['Isopen']);
}
0 голосов
/ 14 ноября 2011

Ваша функция cmp неверна (см. Мой пример правильного использования). Кроме того, если вы используете php 5.3+, вы можете использовать анонимные функции, такие как:

usort($data['rowResult'], function($a, $b)
{
    if ($a['Isopen'] == $b['Isopen'])
    {
        return 0;
    }

    return $a['Isopen'] < $b['Isopen'] ? -1 : 1;
});
0 голосов
/ 14 ноября 2011

Аглоритм сортировки - Bubble Sort .

По сути, он сравнивает объекты массива одновременно с определением их порядка. Чтобы увидеть пошаговый пример, см. http://en.wikipedia.org/wiki/Bubble_sort#Step-by-step_example

0 голосов
/ 14 ноября 2011

в этом примере $ a [] и $ b [] - два массива, которые передаются функции с именем 'cmp'. он сравнивает значение Isopen в двух разных массивах.

ознакомьтесь с документацией по пользовательским функциям http://php.net/manual/en/language.functions.php

и как правильно использовать usort () http://php.net/manual/en/function.usort.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...