数字排序数组输出

时间:2013-06-15 02:36:42

标签: php arrays sorting

我正在尝试将输出值从最大值返回到最小值。

以下是数组的示例:

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

1 个答案:

答案 0 :(得分: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&gt; = 5.3。如果你需要支持5&lt; = PHP&lt; 5.3,你需要先声明该函数。


修改

对于5&lt; PHP&lt; 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;
}

修改#2:

如果您仍需要密钥(DEPARTMENTDEPARTMENT1等),请使用uasort代替usort(不需要更改其他代码)。< / p>