2013-06-15 2 views
-1

Я пытаюсь сортировать выходное значение, которое возвращается наименьшим.Вывод массивов с числовой сортировкой

Вот пример массива:

array(
    'ACTION' => 'getsupportdepartments', 
    'RESULT' => 'success', 
    'TOTALRESULTS' => 2, 
    'DEPARTMENTS' => array(
     'DEPARTMENT' => array(
     'ID' => 2, 
     'NAME' => 'Sales', 
     'AWAITINGREPLY' => 5, 
     'OPENTICKETS' => 5 
    ), 
     'DEPARTMENT1' => array(
     'ID' => 1, 
     'NAME' => 'Support', 
     'AWAITINGREPLY' => 15, 
     'OPENTICKETS' => 15 

код я использую:

if(!empty($_GET['sort'])) { 
    $tmpArray = array(); 
    foreach($arr['WHMCSAPI']['DEPARTMENTS'] as $key => $value) { 
    $tmpArray[$value['AWAITINGREPLY']] = $value; 
    } 
    $arr['WHMCSAPI']['DEPARTMENTS'] = $tmpArray; 

    ($_GET['sort'] == 'desc') ? krsort($arr['WHMCSAPI']['DEPARTMENTS']) : ksort($arr['WHMCSAPI']['DEPARTMENTS']); 
} 


    ($_GET['sort'] == 'desc') ? krsort($arr['WHMCSAPI']['DEPARTMENTS']) : ksort($arr['WHMCSAPI']['DEPARTMENTS']); 

    foreach($arr['WHMCSAPI']['DEPARTMENTS'] as $department) { 
    echo $department['NAME'].' - '.$department['AWAITINGREPLY'].'<br />'; 
} 
    echo $exc; 

Однако порядок выхода из AWAITINGREPLY не сортировки.

+0

Не могли бы вы уточнить, каков ваш желаемый результат? – Passerby

+0

В настоящее время выход: продаж - 5 Поддержка - 15 Я хотел бы отсортировать по величине -> наименьшую поддержки - 15 продаж - 5 – cbcp

+0

Итак, вы хотите отсортировать '[ 'ПОДРАЗДЕЛЕНИЯ']' массив , порядок от '['AWAITINGREPLY']'? – Passerby

ответ

0

Нет необходимости изобретать колесо, уже есть функция называется usort:

online demo

function sortDepts(array &$arr,$sort="desc") 
{ 
    if($sort=="desc") 
     usort($arr["DEPARTMENTS"],function($a,$b){ 
      return $b["AWAITINGREPLY"]-$a["AWAITINGREPLY"]; 
     }); 
    else 
     usort($arr["DEPARTMENTS"],function($a,$b){ 
      return $a["AWAITINGREPLY"]-$b["AWAITINGREPLY"]; 
     }); 
    return $arr; 
} 

Обратите внимание, что анонимная функция работает в PHP> = 5.3. Если вам нужно поддерживать 5 < = PHP < 5.3, вам нужно сначала объявить функцию.


Edit:

Для 5 < < PHP 5.3:

online demo

function asc($a,$b) 
{ 
    return $a["AWAITINGREPLY"]-$b["AWAITINGREPLY"]; 
} 
function desc($a,$b) 
{ 
    return $b["AWAITINGREPLY"]-$a["AWAITINGREPLY"]; 
} 
function sortDepts(array &$arr,$sort="desc") 
{ 
    if($sort=="desc") 
     usort($arr["DEPARTMENTS"],"desc"); 
    else 
     usort($arr["DEPARTMENTS"],"asc"); 
    return $arr; 
} 

Edit # 2:

В случае, если вы все еще нужен ключ (DEPARTMENT, DEPARTMENT1 и т.д.), Используйте uasort вместо usort (не требуется никаких других изменений кода).

+0

Это не работает. Дает чистый результат. – cbcp

+0

@cbcp Вы проверили онлайн-демонстрационную ссылку? Какую версию PHP вы используете? – Passerby

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