高分求助一个数据打印出如下效果,请给指点一下思路
$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)*/
$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)*/
aa(9)=5+2+2
aaa(5)
aab(2)
aac(2)
ab(3)=1+2
abf(1)
abc(2)
//
汗,这个还有点复杂
$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;
}
$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;
}
$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
) ))
看不太懂。
为什么注释掉 //echo sum($r, $ret);
这句话打印出的数组就为空了?
不执行当然没有结果了。
因为存成数组的目的就是要在模板中渲染成如下的效果。
/*
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)*/
(
[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
) ))
$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);