-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 的输出顺序不是排序的。

4

1 回答 1

0

不需要重新发明轮子,已经有一个函数叫做usort

在线演示

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,则需要先声明函数。


编辑

对于 5 < PHP < 5.3:

在线演示

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;
}

编辑#2:

如果您仍然需要密钥(DEPARTMENTDEPARTMENT1等),请使用uasort代替usort(无需更改其他代码)。

于 2013-06-15T03:24:07.140 回答