<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. php語言

    PHP二維數組排序的3種方法和自定義函數分享

    時間:2025-03-28 02:09:00 php語言 我要投稿
    • 相關推薦

    PHP二維數組排序的3種方法和自定義函數分享

      這篇文章主要介紹了PHP二維數組排序的3種方法和自定義函數分享,需要的朋友可以參考下

      關于排序一般我們都是通過數據庫或者nosql(eg:redis)先排好序然后輸出到程序里直接使用,但是有些時候我們需要通過PHP直接來對數組進行排序,而在PHP里存儲數據用到最多的就是對象和數組,但處理較多的就是數組,因為有非常豐富的內置函數庫(其實對象一定程度上也可以理解為是數組),這些函數庫很大程度上可以幫助我們實現某些功能。常用的系統函數有sort、asort、arsort、ksort、krsort等等,這里我主要說下對二維數組的排序,兩種方法:

      一、用PHP自帶array_multisort函數排序

      復制代碼代碼如下:

      <?php

      $data = array();

      $data[] = array('volume' => 67, 'edition' => 2);

      $data[] = array('volume' => 86, 'edition' => 1);

      $data[] = array('volume' => 85, 'edition' => 6);

      $data[] = array('volume' => 98, 'edition' => 2);

      $data[] = array('volume' => 86, 'edition' => 6);

      $data[] = array('volume' => 67, 'edition' => 7);

      // 取得列的列表

      foreach ($data as $key => $row)

      {

      $volume[$key] = $row['volume'];

      $edition[$key] = $row['edition'];

      }

      array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);

      print_r($data);

      ?>

      輸出結果:

      復制代碼代碼如下:

      Array

      (

      [0] => Array

      (

      [volume] => 98

      [edition] => 2

      )

      [1] => Array

      (

      [volume] => 86

      [edition] => 1

      )

      [2] => Array

      (

      [volume] => 86

      [edition] => 6

      )

      [3] => Array

      (

      [volume] => 85

      [edition] => 6

      )

      [4] => Array

      (

      [volume] => 67

      [edition] => 2

      )

      [5] => Array

      (

      [volume] => 67

      [edition] => 7

      )

      )

      關于array_multisort官方文檔也有比較詳細的說明:http://www.php.net/manual/zh/function.array-multisort.php

      二、自定義函數排序1

      復制代碼代碼如下:

      <?php

      $data = array();

      $data[] = array('volume' => 67, 'edition' => 2);

      $data[] = array('volume' => 86, 'edition' => 1);

      $data[] = array('volume' => 85, 'edition' => 6);

      $data[] = array('volume' => 98, 'edition' => 2);

      $data[] = array('volume' => 86, 'edition' => 6);

      $data[] = array('volume' => 67, 'edition' => 7);

      // 取得列的列表

      foreach ($data as $key => $row)

      {

      $volume[$key] = $row['volume'];

      $edition[$key] = $row['edition'];

      }

      $ret = arraySort($data, 'volume', 'desc');

      print_r($ret);

      /**

      * @desc arraySort php二維數組排序 按照指定的key 對數組進行排序

      * @param array $arr 將要排序的數組

      * @param string $keys 指定排序的key

      * @param string $type 排序類型 asc | desc

      * @return array

      */

      function arraySort($arr, $keys, $type = 'asc') {

      $keysvalue = $new_array = array();

      foreach ($arr as $k => $v){

      $keysvalue[$k] = $v[$keys];

      }

      $type == 'asc' ? asort($keysvalue) : arsort($keysvalue);

      reset($keysvalue);

      foreach ($keysvalue as $k => $v) {

      $new_array[$k] = $arr[$k];

      }

      return $new_array;

      }

      ?>

      輸出結果:

      復制代碼代碼如下:

      Array

      (

      [3] => Array

      (

      [volume] => 98

      [edition] => 2

      )

      [4] => Array

      (

      [volume] => 86

      [edition] => 6

      )

      [1] => Array

      (

      [volume] => 86

      [edition] => 1

      )

      [2] => Array

      (

      [volume] => 85

      [edition] => 6

      )

      [5] => Array

      (

      [volume] => 67

      [edition] => 7

      )

      [0] => Array

      (

      [volume] => 67

      [edition] => 2

      )

      )

      這個自定義函數與系統函數的一個區別就是:自定義函數只支持針對某一個key的排序,如果要支持多個key的排序需要執行多次; 而系統函數array_multisort可以一次性對多個key且可以指定多個排序規則,系統函數還是相當強大的,推薦使用系統函數,畢竟是C底層實現的,這里只是舉例說明如果通過自定義函數來對數組進行排序,當然這個自定義函數也可以繼續擴展來支持更多的排序規則。在取排名、排行榜、成績等場景中用到的還是非常多的。

      三、自定義函數排序2

      以下函數是對一個給定的二維數組按照指定的鍵值進行排序,先看函數定義:

      復制代碼代碼如下:

      function array_sort($arr,$keys,$type='asc'){

      $keysvalue = $new_array = array();

      foreach ($arr as $k=>$v){

      $keysvalue[$k] = $v[$keys];

      }

      if($type == 'asc'){

      asort($keysvalue);

      }else{

      arsort($keysvalue);

      }

      reset($keysvalue);

      foreach ($keysvalue as $k=>$v){

      $new_array[$k] = $arr[$k];

      }

      return $new_array;

      }

      它可以對二維數組按照指定的鍵值進行排序,也可以指定升序或降序排序法(默認為升序),用法示例:

      復制代碼代碼如下:

      $array = array(

      array('name'=>'手機','brand'=>'諾基亞','price'=>1050),

      array('name'=>'筆記本電腦','brand'=>'lenovo','price'=>4300),

      array('name'=>'剃須刀','brand'=>'飛利浦','price'=>3100),

      array('name'=>'跑步機','brand'=>'三和松石','price'=>4900),

      array('name'=>'手表','brand'=>'卡西歐','price'=>960),

      array('name'=>'液晶電視','brand'=>'索尼','price'=>6299),

      array('name'=>'激光打印機','brand'=>'惠普','price'=>1200)

      );

      $ShoppingList = array_sort($array,'price');

      print_r($ShoppingList);

      上面是對$array這個二維數組按照'price'從低到高的排序。

    【PHP二維數組排序的3種方法和自定義函數分享】相關文章:

    PHP二維數組排序的方法09-03

    PHP二維數組排序方法06-24

    PHP數組的排序09-28

    PHP數組函數知識10-24

    PHP中數組的分組排序07-26

    關于PHP數組函數知識09-16

    簡單PHP數組函數介紹09-26

    PHP 多維數組的排序問題10-23

    PHP 數組排序方法總結07-18

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人