PHP代码对数组进行排序.....?

时间:2011-03-22 11:37:52

标签: php arrays sorting multidimensional-array

  

可能重复:
  Sorting an associative array in PHP

大家好,

我有一个类似

的数组
<?php
    $data[] = array('id' => 67, 'hits' => 2);
    $data[] = array('id' => 86, 'hits' => 1);
    $data[] = array('id' => 85, 'hits' => 6);
    $data[] = array('id' => 98, 'hits' => 2);
    $data[] = array('id' => 89, 'hits' => 6);
    $data[] = array('id' => 65, 'hits' => 7);
 ?>

我想在sort的基础上hits这个数组。

请建议一些帮助我的代码......

提前致谢

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

您需要usort()函数 - 允许您指定自定义比较函数。请参阅http://php.net/manual/en/function.usort.php

比较功能可以是例如 function cmp($ a,$ b) {     返回strcasecmp($ a ['edition'],$ b ['edition']); }

答案 2 :(得分:1)

usort()具有以下比较功能:

function cmpHits($a, $b) {
    return $a['hits'] - $b['hits'];
}

(未经测试,uasort()如果您想维护关键关联。)

答案 3 :(得分:-1)

试试这个:

array_multi_sort($data, array('edition'=>SORT_DESC));

function array_multi_sort($array, $cols)
{
    $colarr = array();
    foreach($cols as $col => $order)
    {
        $colarr[$col] = array();
        foreach ($array as $k => $row)
        {
            $colarr[$col]['_'.$k] = strtolower($row[$col]);
        }
    }

    $eval = 'array_multisort(';
    foreach($cols as $col => $order)
    {
        $eval .= '$colarr[\''.$col.'\'],'.$order.',';
    }
    $eval = substr($eval,0,-1).');';
    eval($eval);
    $ret = array();
    foreach($colarr as $col => $arr)
    {
        foreach($arr as $k => $v)
        {
            $k = substr($k,1);
            if (!isset($ret[$k])) $ret[$k] = $array[$k];
            $ret[$k][$col] = $array[$k][$col];
        }
    }
    return $ret;
}

资源:http://php.net/manual/en/function.array-multisort.php