当前位置:Gxlcms > PHP教程 > 二维数组按值排序

二维数组按值排序

时间:2021-07-01 10:21:17 帮助过:59人阅读

  1. <code>//排序前
  2. $arr = array(
  3. 0 => array('id' => 'C160001-12'),
  4. 1 => array('id' => 'C160001-10'),
  5. 2 => array('id' => 'C160001-11'),
  6. 3 => array('id' => 'C160001-4'),
  7. 4 => array('id' => 'C160001-6'),
  8. 5 => array('id' => 'C160001-3'),
  9. 6 => array('id' => 'C160001-2'),
  10. 7 => array('id' => 'C160001-5'),
  11. 8 => array('id' => 'C160001-0'),
  12. 9 => array('id' => 'C160001-8'),
  13. 10 => array('id' => 'C160001-1'),
  14. 11 => array('id' => 'C160001-9'),
  15. 12 => array('id' => 'C160001-7'),
  16. );</code>
  1. <code>//排序后
  2. $arr = array(
  3. 0 => array('id' => 'C160001-0'),
  4. 1 => array('id' => 'C160001-1'),
  5. 2 => array('id' => 'C160001-2'),
  6. 3 => array('id' => 'C160001-3'),
  7. 4 => array('id' => 'C160001-4'),
  8. 5 => array('id' => 'C160001-5'),
  9. 6 => array('id' => 'C160001-6'),
  10. 7 => array('id' => 'C160001-7'),
  11. 8 => array('id' => 'C160001-8'),
  12. 9 => array('id' => 'C160001-9'),
  13. 10 => array('id' => 'C160001-10'),
  14. 11 => array('id' => 'C160001-11'),
  15. 12 => array('id' => 'C160001-12'),
  16. );</code>

求大神解答排序算法!
---------------------------------------华丽的分割线------------------------------------------
虽然楼下给出了答案,但是本人的另一位朋友又给出了一种更简便直观的方法,如下:

  1. <code>usort($statementsample,function($a,$b){
  2. return (int)substr($a['id'],8)>(int)substr($b['id'],8);
  3. });</code>

回复内容:

  1. <code>//排序前
  2. $arr = array(
  3. 0 => array('id' => 'C160001-12'),
  4. 1 => array('id' => 'C160001-10'),
  5. 2 => array('id' => 'C160001-11'),
  6. 3 => array('id' => 'C160001-4'),
  7. 4 => array('id' => 'C160001-6'),
  8. 5 => array('id' => 'C160001-3'),
  9. 6 => array('id' => 'C160001-2'),
  10. 7 => array('id' => 'C160001-5'),
  11. 8 => array('id' => 'C160001-0'),
  12. 9 => array('id' => 'C160001-8'),
  13. 10 => array('id' => 'C160001-1'),
  14. 11 => array('id' => 'C160001-9'),
  15. 12 => array('id' => 'C160001-7'),
  16. );</code>
  1. <code>//排序后
  2. $arr = array(
  3. 0 => array('id' => 'C160001-0'),
  4. 1 => array('id' => 'C160001-1'),
  5. 2 => array('id' => 'C160001-2'),
  6. 3 => array('id' => 'C160001-3'),
  7. 4 => array('id' => 'C160001-4'),
  8. 5 => array('id' => 'C160001-5'),
  9. 6 => array('id' => 'C160001-6'),
  10. 7 => array('id' => 'C160001-7'),
  11. 8 => array('id' => 'C160001-8'),
  12. 9 => array('id' => 'C160001-9'),
  13. 10 => array('id' => 'C160001-10'),
  14. 11 => array('id' => 'C160001-11'),
  15. 12 => array('id' => 'C160001-12'),
  16. );</code>

求大神解答排序算法!
---------------------------------------华丽的分割线------------------------------------------
虽然楼下给出了答案,但是本人的另一位朋友又给出了一种更简便直观的方法,如下:

  1. <code>usort($statementsample,function($a,$b){
  2. return (int)substr($a['id'],8)>(int)substr($b['id'],8);
  3. });</code>

  1. <code>function my_sort($a,$b)
  2. {
  3. $a = explode('-',$a['id'])[1];
  4. $b = explode('-',$b['id'])[1];
  5. if ($a==$b) return 0;
  6. return ($a<$b)?-1:1;
  7. }
  8. usort($arr,'my_sort');
  9. </code>

使用usort 方法比较灵活。

array_multisort() 函数 示例如下

  1. <code>$data[] = array('volume' => 67, 'edition' => 2);
  2. $data[] = array('volume' => 86, 'edition' => 1);
  3. $data[] = array('volume' => 85, 'edition' => 6);
  4. $data[] = array('volume' => 98, 'edition' => 2);
  5. $data[] = array('volume' => 86, 'edition' => 6);
  6. $data[] = array('volume' => 67, 'edition' => 7);
  7. $type = array();
  8. foreach ($data as $key => $value) {
  9. $type[] = $value['edition'];
  10. }
  11. array_multisort($type, SORT_ASC, $data);
  12. var_dump($data);</code>

人气教程排行