1. 程式人生 > >【PHP 手冊 >陣列 函式】array_multisort

【PHP 手冊 >陣列 函式】array_multisort

(PHP 4, PHP 5, PHP 7)
array_multisort — 對多個數組或多維陣列進行排序

說明

bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] )

array_multisort() 可以用來一次對多個數組進行排序,或者根據某一維或多維對多維陣列進行排序。

關聯(string)鍵名保持不變,但數字鍵名會被重新索引。

Note:
如果兩個成員相等,則它們在排序陣列中的相對順序是未定義的。

引數

array1
要排序的 array。

array1_sort_order
之前 array 引數要排列的順序。 SORT_ASC 按照上升順序排序, SORT_DESC 按照下降順序排序。

此引數可以和 array1_sort_flags 互換,也可以完全刪除,預設是 SORT_ASC 。

array1_sort_flags
為 array 引數設定選項:

排序型別標誌:

SORT_REGULAR - 將專案按照通常方法比較(不修改型別)
SORT_NUMERIC - 按照數字大小比較
SORT_STRING - 按照字串比較
SORT_LOCALE_STRING - 根據當前的本地化設定,按照字串比較。 它會使用 locale 資訊,可以通過 setlocale() 修改此資訊。
SORT_NATURAL - 以字串的"自然排序",類似 natsort()
SORT_FLAG_CASE - 可以組合 (按位或 OR) SORT_STRING 或者 SORT_NATURAL 大小寫不敏感的方式排序字串。
引數可以和 array1_sort_order 交換或者省略,預設情況下是 SORT_REGULAR。

...

可選的選項,可提供更多陣列,跟隨在 sort order 和 sort flag 之後。 提供的陣列和之前的陣列要有相同數量的元素。 換言之,排序是按字典順序排列的。

返回值

成功時返回 TRUE, 或者在失敗時返回 FALSE。

更新日誌

版本 說明
5.4.0 array1_sort_flags 增加 SORT_NATURAL 和 SORT_FLAG_CASE 選項。
5.3.0 array1_sort_flags 增加選項 SORT_LOCALE_STRING。

範例

Example #1 多個數組排序

<?php
$ar1 = array(10, 100, 100, 0);
$ar2 = array(1, 3, 2, 4);
array_multisort($ar1, $ar2);

var_dump($ar1);
var_dump($ar2);
?>

這個例子裡,排序後,第一個陣列會包含 0、 10、 100、 100。 第二個陣列會包含 4、1、 2、 3。 第二個數組裡的專案對應第一個陣列後也進行了排序(100 和 100)。

array(4) {
  [0]=> int(0)
  [1]=> int(10)
  [2]=> int(100)
  [3]=> int(100)
}
array(4) {
  [0]=> int(4)
  [1]=> int(1)
  [2]=> int(2)
  [3]=> int(3)
}

Example #2 排序多維陣列

<?php
$ar = array(
       array("10", 11, 100, 100, "a"),
       array(   1,  2, "2",   3,   1)
      );
array_multisort($ar[0], SORT_ASC, SORT_STRING,
                $ar[1], SORT_NUMERIC, SORT_DESC);
var_dump($ar);
?>

本例中在排序後,第一個陣列將變成 “10”,100,100,11,“a”(被當作字串以升序排列)。第二個陣列將包含 1, 3, “2”, 2, 1(被當作數字以降序排列)。

array(2) {
  [0]=> array(5) {
    [0]=> string(2) "10"
    [1]=> int(100)
    [2]=> int(100)
    [3]=> int(11)
    [4]=> string(1) "a"
  }
  [1]=> array(5) {
    [0]=> int(1)
    [1]=> int(3)
    [2]=> string(1) "2"
    [3]=> int(2)
    [4]=> int(1)
  }
}

Example #3 對資料庫結果進行排序

本例中 data 陣列中的每個單元表示一個表中的一行。這是典型的資料庫記錄的資料集合。

例子中的資料如下:

volume | edition
-------+--------
    67 |       2
    86 |       1
    85 |       6
    98 |       2
    86 |       6
    67 |       7

資料全都存放在名為 data 的陣列中。這通常是通過迴圈從資料庫取得的結果,例如 mysql_fetch_assoc()。

<?php
$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);
?>

本例中將把 volume 降序排列,把 edition 升序排列。

現在有了包含有行的陣列,但是 array_multisort() 需要一個包含列的陣列,因此用以下程式碼來取得列,然後排序。

<?php
// 取得列的列表
foreach ($data as $key => $row) {
    $volume[$key]  = $row['volume'];
    $edition[$key] = $row['edition'];
}

// 將資料根據 volume 降序排列,根據 edition 升序排列
// 把 $data 作為最後一個引數,以通用鍵排序
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>

資料集合現在排好序了,結果如下:

volume | edition
-------+--------
    98 |       2
    86 |       1
    86 |       6
    85 |       6
    67 |       2
    67 |       7

Example #4 不區分大小寫字母排序

SORT_STRING 和 SORT_REGULAR 都是區分大小寫字母的,大寫字母會排在小寫字母之前。

要進行不區分大小寫的排序,就要按照原陣列的小寫字母拷貝來排序。

<?php
$array = array('Alpha', 'atomic', 'Beta', 'bank');
$array_lowercase = array_map('strtolower', $array);

array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array);

print_r($array);
?>

以上例程會輸出:

Array
(
    [0] => Alpha
    [1] => atomic
    [2] => bank
    [3] => Beta
)

相關推薦

PHP 手冊 >陣列 函式array_multisort

(PHP 4, PHP 5, PHP 7) array_multisort — 對多個數組或多維陣列進行排序 說明 bool array_multisort ( array &$array1 [, mixed $array1_sort_order =

PHP 手冊 >陣列 函式array_diff

array_diff (PHP 4 >= 4.0.1, PHP 5, PHP 7) array_diff — 計算陣列的差集 說明 array array_diff ( array $array1

PHP 手冊 >陣列 函式array_key_first,array_key_last

(PHP 7 >= 7.3.0) array_key_first — 獲得陣列的第一個鍵名(使用時注意php版本) 說明 mixed array_key_first ( array $array

PHP 手冊 >陣列 函式array_merge_recursive,array_merge

【1】 array_merge_recursive 與 【2】 array_merge 異: 合併的陣列中有相同的字串鍵名時, 【1】 以該鍵名構建二維陣列,連續的數字索引為二維鍵名依次排序鍵值; 【2】鍵名不變,後者鍵值覆蓋前者 同: 合併的陣列中有

php手冊:變數預定義變數

'argc'包含命令列模式下傳遞給該指令碼的引數的數目(如果執行在命令列模式下)。' GATEWAY_INTERFACE '伺服器使用的 CGI 規範的版本。'SERVER_ADDR'當前執行指令碼所在的伺服器的 IP 地址。例:::1'SERVER_NAME'當前執行指令碼所在的伺服器的主機名。例:loca

論文:麥克風陣列增強An alternative approach to linearly constrained adaptive beamforming

tor rain 延遲 margin 不同 .cn 估計 梯度下降 rst 作者:桂。 時間:2017-06-03 21:46:59 鏈接:http://www.cnblogs.com/xingshansi/p/6937259.html 原文下載:http://p

論文:麥克風陣列增強Microphone Array Post-Filtering For Non-Stationary Noise Suppression

ted speech 增強 gin rop pro 完全 ack 理論 作者:桂。 時間:2017-06-08 08:01:41 鏈接:http://www.cnblogs.com/xingshansi/p/6957027.html 原文鏈接:http://pan

PHP基礎入門(二)PHP函數基礎

就是 進行 size 自定義 取地址 代碼 功能 sha 有一種 PHP基礎入門(二)——函數基礎 了解 PHP基礎入門詳解(一) 後,給大家分享一下PHP的函數基礎。 這部分主要講的就是: 函數的聲明與使用、PHP中變量的作用域、靜態變量、函數的參數傳遞、變量函數

PHP陣列函式

PHP之陣列函式(一) array_combine(array $keys , array $values); 描述:生成一個數組,用一個數組的值作為鍵名,另一個數組的值作為值 引數: 例子: <?php $a =

hdu 1521 排列組合指數型生成函式

根據套路列出式子:\( \prod_{i=1}^{n}\sum_{j=0}^{c[i]}\frac{x^j}{j!} \),然後暴力展開即可 #include<iostream> #include<cstdio> #include<cstring> using names

php陣列函式

array() 建立陣列。 array_change_key_case() 把陣列中所有鍵更改為小寫或大寫。 array_chunk() 把一個數組分割為新的陣列塊。

BZOJ3155/LNSYOJ96 preprefix樹狀陣列x2做題報告

這道題是樹狀陣列+數學題,然而我數學並不好 題目描述 對於一個長度為nn的序列a1,a2,a3……ana1,a2,a3……an,其字首和(Prefix Sum)SiSi為前ii個元素的和,即∑k=1iai∑k=1iai。而字首和的字首和(Preprefix Sum)就是把字首和序列S1,S2,S3……Sn

LNSYOJ203最大值樹狀陣列應用做題報告+樹狀陣列深刻理解

這道題是一個典型的樹狀陣列查詢有幾個比某個數大/小的數的應用 題目描述    給定NN個區間,選定一個固定整數值TT,對於一個區間[ai,bi][ai,bi]. 如果T<aiT<ai,那麼T在這個區間的得分為X, 如果T>biT>bi,那麼T在這個區間的得分為Z, 如果ai≤

hdu 1521 排列組合指數型母函式

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1521   指數型母函式定義及其作用: #include<stdio.h> #include<string.h> #include<string&

KMP/字尾陣列DC3POJ

題意: 給出若干個字串,問每個字串恰好最多包含幾個迴圈節。 題解: 一、KMP KMP應該是標解,直接判斷一下最後迴圈節是否整除即可。 #include<stdio.h> #include<string.h> #include<io

CodeForces540E樹狀陣列+二分

思路: 1:變換的做一次樹狀陣列求逆序就好了 2:然後就是對於變換的求前面有多少個比他大,後面有多少個比他小 具體: 對於當前位置,前面有多少比他大,然後減去被佔多少位置(二分就好) 對於後面位置,後面有多少比他小,然後減去被佔多少位置(二分就好)

模板·字尾陣列/sa洛谷 P3809 模板字尾排序

題目:字尾排序 程式碼: #include<bits/stdc++.h> using namespace std; #define maxn 1000000 int n,m; char a[maxn+5]; int sa[maxn+5],rk[maxn+5];

牛客練習賽7 E 題 珂朵莉的數列 樹狀陣列 + 思維

傳送門 //對於一個數n, 它有n*(n+1)/2個子區間, 問這些子區間的逆序對數之和. //那麼這個區間問題一般都是計算貢獻問題, 所以先分析問題如果有 i < j 且 a[i] > a[j] 那麼區間1<= l <=i, j &

Java基礎語法迴圈練習 陣列練習

第7天 Java基礎語法 今日內容介紹  迴圈練習  陣列方法練習 第1章 迴圈練習 1.1 編寫程式求 1+3+5+7+……+99 的和值。 題目分析: 通過觀察發現,本題目要實現的奇數(範圍1-100之間)的累加和。 為了記錄累加和的值,我們

php實現資料結構單向連結串列

什麼是單向連結串列 連結串列是以鏈式儲存資料的結構,其不需要連續的儲存空間,連結串列中的資料以節點來表示,每個節點由元素(儲存資料)和指標(指向後繼節點)組成。 單向連結串列(也叫單鏈表)是連結串列中最簡單的一種形式,每個節點只包含一個元素和一個指標。它有一個表頭,並且除了最後一個節點外,所有節點都有其後