[請益] 請問如何排序?很困難…
假設我目前有一個陣列如下
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
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
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
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
12/31 21:17, 11F
→
12/31 22:09, , 12F
12/31 22:09, 12F
→
12/31 22:09, , 13F
12/31 22:09, 13F
→
12/31 23:33, , 14F
12/31 23:33, 14F
討論串 (同標題文章)