sort()是依什麼規則在排序2維陣列...

就如題目所說的,SORT()函式是依照何種關係排序二維陣列的...

已更新項目:

我想問的是:

$a=array(2,3,1);

$b=array(3,1,2);

$arr=array($a,$b);

現在$arr[0][2]=1;且$arr[1][2]=2;

在經過SORT()排序後1這個值的位置變為$arr[0][0]

那麼原本$arr[1][2]的值 2 的位置是否也會跟著跑到$arr[1][0]去..

4 個解答

評分
  • 1 0 年前
    最佳解答

    在這裡就有囉~~~

    http://tw.knowledge.yahoo.com/question/?qid=110610...

    連標題幾乎都一樣,猜想你一定沒搜尋對吧!!

    唉~~~這肯定又是作業~~~

    2006-11-01 23:55:12 補充:

    不對呀...前次也是你問的

    所以剛剛不好意思,沒注意到是同一人

    那個解答有問題嗎??

    2006-11-02 17:20:34 補充:

    先對先前因沒有瞭解清楚的部分對樓主阿斯蘭‧薩拉說聲抱歉~~/*正如貓盒子和Dr.ice所說sort並不能對多維陣列做排序您如果要用在多維陣列的排序您可以用 array_multisort以下舉三個範例來說明*/echo "範例一<br>";$a=array(2,3,1); $b=array(3,1,2); $arr=array_multisort($a,$b);var_dump($a);var_dump($b);echo "<br>";echo "範例二<br>";$arr=array(array(2,3,1),array(3,1,2));array_multisort($arr[0], SORT_ASC, SORT_NUMERIC, $arr[1], SORT_NUMERIC, SORT_ASC);var_dump($arr);echo "<br>";/*範例一與範例二結果其實是一樣的,只因輸出不同範例一是將 $a 及 $b 分別輸出所以得到 $a=array(1,2,3); $b=array(2,3,1);範例二則是輸出 $arr 主陣列所以得到的是 $arr=array($a=array(1,2,3),$b=array(2,3,1));此 array_multisort 排序方法為參照,意思是原陣列2 3 13 1 2排序後1 2 32 3 1後面的陣列是跟著前面的陣列移動,並非兩個陣列獨自移動所以是後者參照前者,當然,也有前者參照後者的時候這就看範例三*/echo "範例三<br>";$arr=array(array(2,3,1,1),array(3,1,2,4));array_multisort($arr[0], SORT_ASC, SORT_NUMERIC, $arr[1], SORT_NUMERIC, SORT_ASC);var_dump($arr);echo "<br>";/*以上這種情形,則因為 $arr[0][2] 跟 $arr[0][3] 是一樣所以此時就由 $arr[1][2] 跟 $arr[1][3] 做比較,所以結果是 2<4因此,例三的變化就會是原陣列2 3 1 13 1 2 4排序後1 1 2 32 4 3 1*//*另外解釋一下 array_multisort 的參數部分排序規則部分 SORT_ASC - 按照上升順序排序SORT_DESC - 按照下降順序排序排序資料類型部分SORT_REGULAR - 將陣列內容按照一般方法比較SORT_NUMERIC - 將陣列內容按照數值比較SORT_STRING - 將陣列內容按照字串比較在例一中並沒有指定排序規則與排序資料類型在沒有指定的情況下,預設排序規則是SORT_ASC,預設資料類型是 SORT_REGULAR*/您可以參考PHP Manual之 http://tw2.php.net/manual/en/function.array-multis... Manual都沒有繁中版,雖有一些比較熱心的網友自己翻譯PHP線上手冊,但目前能找到的都是比較舊的版本了,以至於現在比較新的都沒有比較完整的說明。感謝林義祥多年來一直對PHP手冊翻譯的貢獻...敬禮~~~http://linux.tnc.edu.tw/techdoc/banic/array/array_...

    參考資料: PHP Manual+自己稍微整理~~~
  • 1 0 年前

    sort() 2為排列法,

    $a=array(2,3,1);

    $b=array(3,1,2);

    $arr=array($b,$a);

    sort($arr[1]);

    sort($arr[0]);

    sort($arr);

    print_r($arr);

    因為SORT只能對一為做排列,所以要做二為只能分開作,

    sort($arr[1]);

    sort($arr[0]);

    是做內部的array排序,其排序方式之前的問題說過了。

    sort($arr); 是做外部的array,外部排序方式是看內部array的第一個值做比對

    誰比較小誰排第一,如果一樣再找第二位,在判別誰比較小。

    所以出來結果應該是

    Array

    (

    [0] => Array

    (

    [0] => 1

    [1] => 2

    [2] => 3

    )

    [1] => Array

    (

    [0] => 1

    [1] => 3

    [2] => 3

    )

    )

  • 1 0 年前

    這個部份我不太熟..本來想用意見的..

    但是字數過多..就先貼在回答嚕 待高手補充 歹勢

    這是用PHP函式 print_r 列出來的內容 參考看看

    排序前

    Array

    (

    [0] => Array

    (

    [0] => 2

    [1] => 3

    [2] => 1

    )

    [1] => Array

    (

    [0] => 3

    [1] => 1

    [2] => 2

    )

    )

    用sort()排序後

    Array

    (

    [0] => Array

    (

    [0] => 2

    [1] => 3

    [2] => 1

    )

    [1] => Array

    (

    [0] => 3

    [1] => 1

    [2] => 2

    )

    )

    sort()對二維以上的陣列 似乎沒有作用

    2006-11-02 08:23:57 補充:

    $arr下是陣列 沒有值可以排序

    2006-11-02 08:27:49 補充:

    排序的規則 印象中是使用ASCII來排

  • 1 0 年前

    我想他的意思可能是用哪種algorithm 做的,例如bubble sort 或者 linear sort 之類的吧 ~

還有問題?馬上發問,尋求解答。