仅有的分求助一个数据打印出如下效果,请给指点一下思路。。。

xuqh123 优购物 技术经理  2010-07-11 03:05:12
高分求助一个数据打印出如下效果,请给指点一下思路。。。
	
$cata = array();
$cata[0] = 'a_aa_aaa_5';
$cata[1] = 'a_aa_aab_2';
$cata[2] = 'a_aa_aac_2';
$cata[3] = 'a_ab_abb_1';
$cata[4] = 'a_ab_abc_2';
$cata[5] = 'b_ba_baa_9';
$cata[6] = 'b_ba_bab_2';
$cata[7] = 'b_bb_bbb_3';
$cata[8] = 'c_ca_cab_2';
$cata[9] = 'c_ca_caa_3';
$cata[10] = 'c_ca_cac_4';
/*
a (12)
aa(9)
aaa(5)
aab(2)
aac(2)
ab(3)
abf(1)
abc(2)
b(14)
ba(11)
ba(9)
ba(2)
bb(3)
bbb(3)
c(9)
ca(9)
cab(2)
caa(3)
cac(4)

*/


...全文
103 点赞 收藏 14
写回复
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyang1588 2010-07-13
ding
回复
xuzuning 2010-07-13
[Quote=引用 11 楼 xuqh123 的回复:]
能否去掉'__num'这个键。

得到这样的如下数组也可以:

PHP code

Array
(
[a] => Array
(
[aa] => Array
(
[aaa] => 5
[aab] => 2
……
[/Quote]
$cata = array();
$cata[0] = 'a_aa_aaa_5';
$cata[1] = 'a_aa_aab_2';
$cata[2] = 'a_aa_aac_2';
$cata[3] = 'a_ab_abb_1';
$cata[4] = 'a_ab_abc_2';
$cata[5] = 'b_ba_baa_9';
$cata[6] = 'b_ba_bab_2';
$cata[7] = 'b_bb_bbb_3';
$cata[8] = 'c_ca_cab_2';
$cata[9] = 'c_ca_caa_3';
$cata[10] = 'c_ca_cac_4';

foreach($cata as $v) {
list($a, $b, $c, $d) = split('_', $v);
$r[$a][$b][$c] = $d;
}
print_r($r);
回复
xuqh123 2010-07-12
谢谢楼上。
能否把输出的结果保存为三维数组?

回复
wdwz1254 2010-07-12
不懂 路过 顶下
回复
xuqh123 2010-07-12
能否去掉'__num'这个键。

得到这样的如下数组也可以:

Array
(
[a] => Array
(
[aa] => Array
(
[aaa] => 5
[aab] => 2
[aac] => 2
)

[ab] => Array
(
[abf] => 1
[abc] => 2
)

)

[b] => Array
(
[ba] => Array
(
[baa] => 9
[bab] => 2
)

[bb] => Array
(
[bbb] => 3
)

)

)
回复
xuqh123 2010-07-12
谢谢各位,出来的数组能否foreach成如下效果。
因为存成数组的目的就是要在模板中渲染成如下的效果。
/*
a (12)
aa(9)
aaa(5)
aab(2)
aac(2)
ab(3)
abf(1)
abc(2)
b(14)
ba(11)
ba(9)
ba(2)
bb(3)
bbb(3)
c(9)
ca(9)
cab(2)
caa(3)
cac(4)

*/
回复
yukon12345 2010-07-12
因为他顺便执行了下sum($r, $ret);
不执行当然没有结果了。
回复
xuqh123 2010-07-12
谢谢楼上,能否解释一下算法啊。
看不太懂。
为什么注释掉 //echo sum($r, $ret);
这句话打印出的数组就为空了?
回复
xuzuning 2010-07-12
$cata = array();
$cata[0] = 'a_aa_aaa_5';
$cata[1] = 'a_aa_aab_2';
$cata[2] = 'a_aa_aac_2';
$cata[3] = 'a_ab_abb_1';
$cata[4] = 'a_ab_abc_2';
$cata[5] = 'b_ba_baa_9';
$cata[6] = 'b_ba_bab_2';
$cata[7] = 'b_bb_bbb_3';
$cata[8] = 'c_ca_cab_2';
$cata[9] = 'c_ca_caa_3';
$cata[10] = 'c_ca_cac_4';

foreach($cata as $v) {
list($a, $b, $c, $d) = split('_', $v);
$r[$a][$b][$c] = $d;
}

function sum($a, &$r) {
foreach($a as $k=>$b) {
if(is_array($b)) {
$r[$k] = array_merge(array('__num' => 0), $b);
$a[$k] = sum($b, $r[$k]);
$r[$k]['__num'] = $a[$k];
}
}
return array_sum($a);
}
$ret = array();
echo sum($r, $ret);

print_r($ret);

Array
(
[a] => Array
(
[__num] => 12
[aa] => Array
(
[__num] => 9
[aaa] => 5
[aab] => 2
[aac] => 2
)

[ab] => Array
(
[__num] => 3
[abb] => 1
[abc] => 2
)

)

[b] => Array
(
[__num] => 14
[ba] => Array
(
[__num] => 11
[baa] => 9
[bab] => 2
)

[bb] => Array
(
[__num] => 3
[bbb] => 3
)

)

[c] => Array
(
[__num] => 9
[ca] => Array
(
[__num] => 9
[cab] => 2
[caa] => 3
[cac] => 4
)

)

)
回复
Dleno 2010-07-11
上面的结尾多输出了逗号和空格


$cata = array();
$cata[0] = 'a_aa_aaa_5';
$cata[1] = 'a_aa_aab_2';
$cata[2] = 'a_aa_aac_2';
$cata[3] = 'a_ab_abb_1';
$cata[4] = 'a_ab_abc_2';
$cata[5] = 'b_ba_baa_9';
$cata[6] = 'b_ba_bab_2';
$cata[7] = 'b_bb_bbb_3';
$cata[8] = 'c_ca_cab_2';
$cata[9] = 'c_ca_caa_3';
$cata[10] = 'c_ca_cac_4';
$printarr=array();
foreach($cata as $item){
$itemarr=explode("_",$item);
$printarr[$itemarr[0]][$itemarr[1]][$itemarr[2]]=$itemarr[3];
}
echo "<pre>";
echo vvar_export($printarr,0);

function vvar_export($array,$c=1,$t='',$var=''){
$c && $var="array(\r\n";
$t.=" ";
if(is_array($array)){
foreach($array as $key => $value){
$var.="$t".addslashes($key)."";
if(is_array($value)){
$var.="(".get_array_sum($value).")\r\n";
$var=vvar_export($value,0,$t,$var);
} else{
$value=addslashes($value);
$value=str_replace("\'","'",$value);
$var.="(".($value).")\r\n";
}
}
}
if($c){
$var.=")";
}
return $var;
}
function get_array_sum($array){
$var=0;
if(is_array($array)){
foreach($array as $value){
if(is_array($value)){
$var+=get_array_sum($value);
} else{
$var+=intval($value);
}
}
}else{
$var+=intval($array);
}
return $var;
}
回复
Dleno 2010-07-11
还好。


$cata = array();
$cata[0] = 'a_aa_aaa_5';
$cata[1] = 'a_aa_aab_2';
$cata[2] = 'a_aa_aac_2';
$cata[3] = 'a_ab_abb_1';
$cata[4] = 'a_ab_abc_2';
$cata[5] = 'b_ba_baa_9';
$cata[6] = 'b_ba_bab_2';
$cata[7] = 'b_bb_bbb_3';
$cata[8] = 'c_ca_cab_2';
$cata[9] = 'c_ca_caa_3';
$cata[10] = 'c_ca_cac_4';
$printarr=array();
foreach($cata as $item){
$itemarr=explode("_",$item);
$printarr[$itemarr[0]][$itemarr[1]][$itemarr[2]]=$itemarr[3];
}
echo vvar_export($printarr,0);

function vvar_export($array,$c=1,$t='',$var=''){
$c && $var="array(\r\n";
$t.=" ";
if(is_array($array)){
foreach($array as $key => $value){
$var.="$t".addslashes($key)."";
if(is_array($value)){
$var.="(".get_array_sum($value).")\r\n";
$var=vvar_export($value,0,$t,$var);
$var.="$t\r\n";
} else{
$value=addslashes($value);
$value=str_replace("\'","'",$value);
$var.="(".($value)."),\r\n";
}
}
}
if($c){
$var.=")";
}
return $var;
}
function get_array_sum($array){
$var=0;
if(is_array($array)){
foreach($array as $value){
if(is_array($value)){
$var+=get_array_sum($value);
} else{
$var+=intval($value);
}
}
}else{
$var+=intval($array);
}
return $var;
}
回复
Dleno 2010-07-11
a (12)=9+3
aa(9)=5+2+2
aaa(5)
aab(2)
aac(2)
ab(3)=1+2
abf(1)
abc(2)
//
汗,这个还有点复杂
回复
czz322 2010-07-11
a(12) 指的是前面5个单独a的尾数相加为12
其他都是这样规律,看下你们有简单点的方法吗
回复
床上等您 2010-07-11
看不明白, a(12) 这个 12 哪里来?
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告