Функция PHP usort

bool usort ( array &array, callback cmp_function )

Эта функция сортирует элементы массива, используя для сравнения значений пользовательскую функцию. Если вам нужно отсортировать массив по необычному критерию, вы должны использовать эту функцию.

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

Замечание: Если два элемента исходного массива равны, их порядок в отсортированном массиве неопределён. До PHP 4.0.6 пользовательские функции сохраняли для таких элеменов порядок в оригинальном массиве, но новый алгоритм сортировки, появившейся в версии 4.1.0 больше не использует это решение и не имеет другого эффективного.

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Пример использования usort()

  <?php
   function cmp($a, $b) {
      if ($a == $b) {
         return 0;
      }
      return ($a < $b) ? -1 : 1;
   }

   $a = array(3, 2, 5, 6, 1);
   usort($a, "cmp");
   while (list($key, $value) = each($a)) {
      echo "$key: $value";
   }
?>  

Результат выполнения данного примера:

0: 1  1: 2  2: 3  3: 5  4: 6

Замечание: Очевидно, что для этого тривиального случая более подходит функция sort().

Пример использования функцией usort() многомерных массивов

<?php
    function cmp($a, $b) {
       return strcmp($a["fruit"], $b["fruit"]);
    }
 
   $fruits[0]["fruit"] = "lemons";
   $fruits[1]["fruit"] = "apples";
   $fruits[2]["fruit"] = "grapes";
    
   usort($fruits, "cmp");

   while (list($key, $value) = each($fruits)) {
      echo "$fruits[$key]: " . $value["fruit"] . "";
   }
?>

При сортировке многомерного массива переменные $a и $b содержат ссылки на первые два индекса массива.

Результат выполнения данного примера:

$fruits[0]: apples  $fruits[1]: grapes  $fruits[2]: lemons

Пример использования usort() с методом класса

<?php
    class TestObj {
       var $name; 
       function TestObj($name)  {
          $this->name = $name;
       }

       /* This is the static comparing function: */
       function cmp_obj($a, $b) {
          $al = strtolower($a->name);
          $bl = strtolower($b->name);
          if ($al == $bl) {
             return 0;
          }
          return ($al > $bl) ? +1 : -1;
       }
   }
   
   $a[] = new TestObj("c");
   $a[] = new TestObj("b");
   $a[] = new TestObj("d");
   usort($a, array("TestObj", "cmp_obj"));  

   foreach ($a as $item) {
      echo $item->name . "";
   }
?>

Результат выполнения данного примера:

b  c  d

См. также uasort(), uksort(), sort(), asort(), arsort(), ksort(), natsort() и rsort().