一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php中二維數組排序問題方法詳解

php中二維數組排序問題方法詳解

2020-11-18 13:36PHP教程網 PHP教程

一維數組排序可以使用asort、ksort等一些方法進程排序,相對來說比較簡單。二維數組的排序怎么實現呢?使用array_multisort和usort可以實現,下面跟著小編來學習php中二維數組排序問題方法詳解

PHP中二維數組排序,可以使用PHP內置函數uasort()

示例一:

使用用戶自定義的比較函數對數組中的值進行排序并保持索引關聯

回調函數如下:注意回調函數的返回值是負數或者是false的時候,表示回調函數的第一個參數在前,第二個參數在后排列

php" id="highlighter_580863">
?
1
2
3
4
5
6
7
8
9
10
$person = array(
  array('num'=>'001','id'=>6,'name'=>'zhangsan','age'=>21),
  array('num'=>'001','id'=>7,'name'=>'ahangsan','age'=>23),
  array('num'=>'003','id'=>1,'name'=>'bhangsan','age'=>23),
  array('num'=>'001','id'=>3,'name'=>'dhangsan','age'=>23),
);
//負數或者false表示第一個參數應該在前
function sort_by_name($x,$y){
  return strcasecmp($x['name'],$y['name']);
}

使用如下:

?
1
uasort($person,'sort_by_name');

下面給出一個二維數組排序的方法,供參考和面試使用:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//$array 要排序的數組
//$row  排序依據列
//$type 排序類型[asc or desc]
//return 排好序的數組
function array_sort($array,$row,$type){
  $array_temp = array();
  foreach($array as $v){
    $array_temp[$v[$row]] = $v;
  }
  if($type == 'asc'){
    ksort($array_temp);
  }elseif($type='desc'){
    krsort($array_temp);
  }else{
  }
  return $array_temp;
}

示例二:

一維數組排序可以使用asort、ksort等一些方法進程排序,相對來說比較簡單。二維數組的排序怎么實現呢?使用array_multisort和usort可以實現

例如像下面的數組:

代碼如下:

?
1
2
3
4
5
$users = array(
  array('name' => 'tom', 'age' => 20)
  , array('name' => 'anny', 'age' => 18)
  , array('name' => 'jack', 'age' => 22)
);

希望能按照age從小到大進行排序。筆者整理了兩個方法出來,分享給大家。

1、使用array_multisort

使用這個方法,會比較麻煩些,要將age提取出來存儲到一維數組里,然后按照age升序排列。具體代碼如下:

代碼如下:

?
1
2
3
4
5
$ages = array();
foreach ($users as $user) {
  $ages[] = $user['age'];
}
array_multisort($ages, SORT_ASC, $users);

執行后,$users就是排序好的數組了,可以打印出來看看。如果需要先按年齡升序排列,再按照名稱升序排列,方法同上,就是多提取一個名稱數組出來,最后的排序方法這樣調用:

代碼如下:

?
1
array_multisort($ages, SORT_ASC, $names, SORT_ASC, $users);

2、使用usort

使用這個方法最大的好處就是可以自定義一些比較復雜的排序方法。例如按照名稱的長度降序排列:

代碼如下:

?
1
2
3
4
5
6
7
usort($users, function($a, $b) {
      $al = strlen($a['name']);
      $bl = strlen($b['name']);
      if ($al == $bl)
        return 0;
      return ($al > $bl) ? -1 : 1;
    });

這里使用了匿名函數,如果有需要也可以單獨提取出來。其中$a, $b可以理解為$users數組下的元素,可以直接索引name值,并計算長度,而后比較長度就可以了。

=====================================================================

這里順便說一下PHP排序的幾個函數

sort 對數組排序一般適用于一維索引數組,不會保持索引

rsort 對數組逆向排序 和sort用法一致

asort 對數組進行排序并保持索引關系對值進行排序,一般適用于一維數組,保持索引關系

arsort 對數組進行逆向排序并保持索引關系和asort用法一致

ksort 對數組按照鍵名排序

krsort 對數組按照鍵名逆向排序

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色怡红院 | 91制片厂制作果冻传媒123 | 日本免费在线播放 | 接吻吃胸摸下面啪啪教程 | 青青青国产 | a片毛片在线免费看 | 韩国美女vip内部2020 | 亚洲国产精品日本无码网站 | 国产高清视频 | chinesemature丰满成熟 | 全肉一女n男np高h双龙养成 | 亚洲精品无码不卡 | 美女扒开腿让男生桶爽漫画 | 亚洲高清无在码在线电影 | 性欧美13处丶14处 | 调教催眠改造np总攻 | 无码天堂亚洲国产AV久久 | 日韩理论片 | 91se在线| 四虎最新紧急更新地址 | 亚洲精品午夜久久aaa级久久久 | 扒开胸流出吃奶 | 国产一二三区视频 | 国语自产拍在线观看7m | 免费高清资源黄网站在线观看 | 欧美精品一国产成人性影视 | 91看片淫黄大片欧美看国产片 | 久久婷婷丁香五月色综合啪免费 | 亚洲视屏在线观看 | 成人在线免费观看视频 | 姐姐不~不可以动漫在线观看 | 国产精品一久久香蕉产线看 | 99久久99久久久精品齐齐鬼色 | 熟睡中的麻麻大白屁股小说 | 暖暖暖免费观看在线观看 | 激情婷婷综合久久久久 | 国产免费大片 | 乌克兰黄色录像 | 精品国产综合 | 国产日韩精品一区二区三区 | 91久久国产视频 |