按多个字段对数组排序(最接近数字)

马里乌斯

如何按两个(一个)不同的值对数组排序?

所以我有一个像这样的数组:

array(
   array(
      'id' => 10,
      'total' => 38,
      'entry' => 400
   ),
   array(
      'id' => 4,
      'total' => 34,
      'entry' => 3100
   ),
   array(
      'id' => 2,
      'total' => 34,
      'entry' => 3150
   ),
   array(
      'id' => 8,
      'total' => 34,
      'entry' => 2980
   ),
);

该数组已经按键排序total,但是它们在中都具有相同的值total所以我需要按最接近3000 by的人进行排序entry

编辑

数组应该首先按排序total,然后再排序entry,因为entry只有排序了所以我可以区分谁是最好的。

因此,数组应如下所示:

array(
  array(
      'id' => 10,
      'total' => 38,
      'entry' => 400
  ),
  array(
      'id' => 8,
      'total' => 34,
      'entry' => 2980
   ),
   array(
      'id' => 4,
      'total' => 34,
      'entry' => 3100
   ),
   array(
      'id' => 2,
      'total' => 34,
      'entry' => 3150
   )
);
伊森

试试这个:

usort($arr, function ($a, $b) {
    if ($a['total'] == $b['total']) { // Only compare on entry when the totals are the same.
        return abs($a['entry'] - 3000) > abs($b['entry'] - 3000);
    }
    return $a['total'] < $b['total'];
});

print_r($arr);

输出:

Array
(
    [0] => Array
        (
            [id] => 2
            [total] => 35
            [entry] => 3150
        )

    [1] => Array
        (
            [id] => 8
            [total] => 34
            [entry] => 2980
        )

    [2] => Array
        (
            [id] => 4
            [total] => 34
            [entry] => 3100
        )

    [3] => Array
        (
            [id] => 6
            [total] => 34
            [entry] => 3250
        )

    [4] => Array
        (
            [id] => 3
            [total] => 32
            [entry] => 3400
        )

)

它是这样工作的:它比较totals,但如果它们相同,则比较entry两个entrys和3000之间的差的绝对值

评估演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章