[請益] 請問如何排序?很困難…

看板PHP作者 (Dowbatw)時間12年前 (2011/12/31 00:49), 編輯推噓1(1013)
留言14則, 5人參與, 最新討論串1/3 (看更多)
假設我目前有一個陣列如下 array( ["AssetsAbstract"]=> array { ["label"]=>"AssetsAbstract", ["belong"]=>"BalanceSheet", ["order"]=>"1.0" } ["BalanceSheet"]=> array { ["label"]=>"BalanceSheet" } ["OtherFinancialAssetsCurrent"]=> array { ["label"]=>"OtherFinancialAssetsCurrent", ["belong"]=>"CurrentAssetsAbstract", ["order"]=>"14.0" } ["CurrentAssetsAbstract"]=> array { ["label"]=>"CurrentAssetsAbstract", ["belong"]=>"AssetsAbstract", ["order"]=>"1.0" } ["HedgingDerivativeAssetsCurrent"]=> array { ["label"]=>"HedgingDerivativeAssetsCurrent", ["belong"]=>"CurrentAssetsAbstract", ["order"]=>"5.0" } ) 陣列中每一個元素的belong指定了從屬性,說明屬於哪一個母元素 order指定了當有多個元素隸屬於同一個母元素時,其各個子元素排列順序為何 沒有belong時,則原則上相對不主動變動他在陣列中的位置 我想要讓他排序之後可以變成這樣的順序: array( ["BalanceSheet"]=> array { ["label"]=>"BalanceSheet" } ["AssetsAbstract"]=> array { ["label"]=>"AssetsAbstract", ["belong"]=>"BalanceSheet", ["order"]=>"1.0" } ["CurrentAssetsAbstract"]=> array { ["label"]=>"CurrentAssetsAbstract", ["belong"]=>"AssetsAbstract", ["order"]=>"1.0" } ["HedgingDerivativeAssetsCurrent"]=> array { ["label"]=>"HedgingDerivativeAssetsCurrent", ["belong"]=>"CurrentAssetsAbstract", ["order"]=>"5.0" } ["OtherFinancialAssetsCurrent"]=> array { ["label"]=>"OtherFinancialAssetsCurrent", ["belong"]=>"CurrentAssetsAbstract", ["order"]=>"14.0" } ) 即依據belong和order 把子元素放在所屬母元素後面 請各位高手指點一下方向… 我想破頭都想不出來怎麼搞… 之所以會有這個問題是因為會計科目的問題 我自己嘗試使用quicksort如下,還是沒辦法順利排出來: function quicksort($arr) { if(!isset($arr[2])) { return $arr; } $piv = $arr[0]; $x = $y = array(); $len = count($arr); $i = 1; while($i < $len) { if( $arr[$i]['belong'] == $piv['label'] ) { $y[] = $arr[$i]; } else { $x[] = $arr[$i]; } ++$i; } return array_merge(quicksort($x), array($piv), quicksort($y)); } 如蒙解惑,不勝感激! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.46.151.251 ※ 編輯: dowbatw 來自: 114.46.151.251 (12/31 01:32) ※ 編輯: dowbatw 來自: 114.46.151.251 (12/31 01:40)

12/31 10:14, , 1F
今天徹夜用了quicksort還是排不出來…
12/31 10:14, 1F
※ 編輯: dowbatw 來自: 114.46.118.220 (12/31 10:35)

12/31 11:24, , 2F
你要不要考慮再說清楚點~ 哈哈 我不太懂需求
12/31 11:24, 2F

12/31 11:24, , 3F
是要用 ORDER 數字大小作排序?
12/31 11:24, 3F

12/31 12:09, , 4F
謝謝,我想說得更清楚應該是「關聯」「從屬」等…這樣應該
12/31 12:09, 4F

12/31 12:09, , 5F
可以了吧?
12/31 12:09, 5F

12/31 12:10, , 6F
「樹狀結構」
12/31 12:10, 6F

12/31 12:48, , 7F
這不是排序…照我看取出來再依序塞回新陣列比較快。
12/31 12:48, 7F

12/31 14:01, , 8F
你要不要考慮 將資訊弄成 ABC 這種一看就懂得~
12/31 14:01, 8F

12/31 14:02, , 9F
然後 再用相同方式說 你想排成怎樣~ 哈哈
12/31 14:02, 9F

12/31 14:02, , 10F
或許比較幫助 我們了解你想要的
12/31 14:02, 10F
想不到我的文意有這麼難理解…… 節錄資產負債表如下圖 資產負債表   資產    流動資產     其他金融資產-流動     存貨      存貨-製造業       存貨-製造業淨額      存貨合計     其他流動資產      遞延所得稅資產-流動      受限制資產      其他流動資產-其他      其他流動資產合計 假設一個科目就是一個項目 我所得到的資料裏面可以知道任一個項目的從屬性 例如「受限制資產」屬於「其他流動資產」 (即根據前文所述的belong值) 又「其他流動資產」的所有子項目中, 「受限制資產」排在「其他流動資產-其他」前面 在「流動資產」的所有子項目中, 「存貨」排在「其他流動資產」前面 (即根據前文所述order值) 我現在只能得到各個項目的資料(在一個陣列中) 要如何重新依照上面所說的從屬關係以及先後順序關係 重新排列陣列 這就是我的問題,謝謝各位了! ※ 編輯: dowbatw 來自: 114.46.118.220 (12/31 14:17) ※ 編輯: dowbatw 來自: 114.46.118.220 (12/31 14:19)

12/31 21:17, , 11F
項目固定,每個項目給個sort key就可以了
12/31 21:17, 11F

12/31 22:09, , 13F
你是要做像這樣的表?
12/31 22:09, 13F

12/31 23:33, , 14F
請教bmyone前輩的微言大意
12/31 23:33, 14F
文章代碼(AID): #1E_Uk5ID (PHP)
文章代碼(AID): #1E_Uk5ID (PHP)