dongpi3237 2013-01-25 09:41
浏览 63
已采纳

按特定顺序按多个键对数组进行排序

I want to sort the following array by multiple keys in the following order: First by "type", then "product", and lastly by "name". This is pretty easily done with usort, although my clients wants "product" sorted in a specific order: Stapler, Binder, Book.

$arr = array(
    array(
        'type' => 'School',
        'product' => 'Book',
        'name' => 'My book',
        'data' => '...'
    ),
    array(
        'type' => 'Job',
        'product' => 'Stapler',
        'name' => 'My stapler',
        'data' => '...'
    ),
    array(
        'type' => 'Personal',
        'product' => 'Binder',
        'name' => 'My binder',
        'data' => '...'
    ),
    array(
        'type' => 'School',
        'product' => 'Book',
        'name' => 'My book',
        'data' => '...'
    )
);

Does anyone know a clever way to accomplish this?

  • 写回答

2条回答 默认 最新

  • dongzan2740 2013-01-25 09:48
    关注
    usort($arr, function ($a, $b) {
      // by type
      $r = strcmp($a['type'], $b['type']);
      if ($r !== 0) {
        return $r;
      }
    
      // by product
      // note: one might want to check if `$a/$b['product']` really is in `$order`
      $order = array('Stapler', 'Binder', 'Book');
      $r = array_search($a['product'], $order) - array_search($b['product'], $order);
      if ($r !== 0) {
        return $r;
      }
    
      // or similar, with a little help by @fab ;)
      /*
      $order = array('Stapler' => 0, 'Binder' => 1, 'Book' => 2);
      $r = $order[$a['product']] - $order[$b['product']];
      if ($r !== 0) {
        return $r;
      }
      */
    
      // name
      return strcmp($a['name'], $b['name']);
    });
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀