作者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