繁体   English   中英

排序数组 object 如果两个键的值数相等则匹配另一个键值对

[英]Sort array object if two key's value number are equal then match to another key value pair

我想对 php object 数组进行排序,在排序时我必须考虑两个不同的键,如果两个用户的值相同,则考虑这些值的另一个键。

给定数组示例

[{'id':'1','total_number':'90','previous_number':'75'},
 {'id':'2','total_number':'80','previous_number':'91'},
 {'id':'3','total_number':'80','previous_number':'84'},
 {'id':'4','total_number':'80','previous_number':'96'},
 {'id':'5','total_number':'95','previous_number':'80'}
]

结果数组:

[{'id':'5','total_number':'95','previous_number':'80'}, 
 {'id':'1','total_number':'90','previous_number':'75'},
 {'id':'4','total_number':'80','previous_number':'96'},
 {'id':'2','total_number':'80','previous_number':'91'},
 {'id':'3','total_number':'80','previous_number':'84'} 
]

You can use a custom sort function to achieve the desired result with the help of usort function in PHP https://www.php.net/manual/en/function.usort.php

// custom sort function
function mySort($a, $b) {
  // is total_number same?
  if ($a->total_number === $b->total_number) {
    // use previous_number to sort
    if ($a->previous_number === $b->previous_number) {
      return 0;
    }
    // sort desc
    return $a->previous_number > $b->previous_number ? -1 : 1;
  }
  // sort desc
  return $a->total_number > $b->total_number ? -1 : 1;
}


// call the function
usort($array, 'mySort');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM