【问题标题】:PHP code to sort an array.....? [duplicate]PHP代码对数组进行排序.....? [复制]
【发布时间】:2011-07-20 10:06:36
【问题描述】:

可能重复:
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);
 ?>

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

请推荐一些对我有帮助的代码......

提前致谢

【问题讨论】:

  • 为什么要问一个从PHP docs 复制粘贴的问题(示例#3)并且已经有了解决方案?

标签: php arrays sorting multidimensional-array


【解决方案1】:
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      试试这个:

      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

      【讨论】:

      • 不需要(也不应该)使用 eval!
      猜你喜欢
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多