作者dowbatw (Dowbatw)
看板PHP
標題[請益] 請問如何排序?很困難…
時間Sat Dec 31 00:49:06 2011
假設我目前有一個陣列如下
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)
1F:→ dowbatw:今天徹夜用了quicksort還是排不出來… 12/31 10:14
※ 編輯: dowbatw 來自: 114.46.118.220 (12/31 10:35)
2F:推 kuAIpAI:你要不要考慮再說清楚點~ 哈哈 我不太懂需求 12/31 11:24
3F:→ kuAIpAI:是要用 ORDER 數字大小作排序? 12/31 11:24
4F:→ dowbatw:謝謝,我想說得更清楚應該是「關聯」「從屬」等…這樣應該 12/31 12:09
5F:→ dowbatw:可以了吧? 12/31 12:09
6F:→ dowbatw:「樹狀結構」 12/31 12:10
7F:→ MOONRAKER:這不是排序…照我看取出來再依序塞回新陣列比較快。 12/31 12:48
8F:→ kuAIpAI:你要不要考慮 將資訊弄成 ABC 這種一看就懂得~ 12/31 14:01
9F:→ kuAIpAI:然後 再用相同方式說 你想排成怎樣~ 哈哈 12/31 14:02
10F:→ kuAIpAI:或許比較幫助 我們了解你想要的 12/31 14:02
想不到我的文意有這麼難理解……
節錄資產負債表如下圖
資產負債表
資產
流動資產
其他金融資產-流動
存貨
存貨-製造業
存貨-製造業淨額
存貨合計
其他流動資產
遞延所得稅資產-流動
受限制資產
其他流動資產-其他
其他流動資產合計
假設一個科目就是一個項目
我所得到的資料裏面可以知道任一個項目的從屬性
例如「受限制資產」屬於「其他流動資產」
(即根據前文所述的belong值)
又「其他流動資產」的所有子項目中,
「受限制資產」排在「其他流動資產-其他」前面
在「流動資產」的所有子項目中,
「存貨」排在「其他流動資產」前面
(即根據前文所述order值)
我現在只能得到各個項目的資料(在一個陣列中)
要如何重新依照上面所說的從屬關係以及先後順序關係
重新排列陣列
這就是我的問題,謝謝各位了!
※ 編輯: dowbatw 來自: 114.46.118.220 (12/31 14:17)
※ 編輯: dowbatw 來自: 114.46.118.220 (12/31 14:19)
11F:→ bmyone:項目固定,每個項目給個sort key就可以了 12/31 21:17
13F:→ guardlan:你是要做像這樣的表? 12/31 22:09
14F:→ dowbatw:請教bmyone前輩的微言大意 12/31 23:33