php – 递归应用array_map(array_walk_recursive?)
发布时间:2020-12-13 22:13:26 所属栏目:PHP教程 来源:网络整理
导读:我有一个关联数组,我正在使用以下代码从ODBC查询创建: while ($row=odbc_fetch_array($oexec)) { if(empty($group[$row['gmm']])) { $group[$row['gmm']] = array(); } if(empty($group[$row['gmm']][$row['acctg_dept_nbr'] . " - " . $row['acctg_dept_de
我有一个关联数组,我正在使用以下代码从ODBC查询创建:
while ($row=odbc_fetch_array($oexec)) { if(empty($group[$row['gmm']])) { $group[$row['gmm']] = array(); } if(empty($group[$row['gmm']][$row['acctg_dept_nbr'] . " - " . $row['acctg_dept_desc']])) { $group[$row['gmm']][$row['acctg_dept_nbr'] . " - " . $row['acctg_dept_desc']] = array(); } if(empty($group[$row['gmm']][$row['acctg_dept_nbr'] . " - " . $row['acctg_dept_desc']][$row['dept_catg_grp_desc']])) { $group[$row['gmm']][$row['acctg_dept_nbr'] . " - " . $row['acctg_dept_desc']][$row['dept_catg_grp_desc']] = array(); } if(empty($group[$row['gmm']][$row['acctg_dept_nbr'] . " - " . $row['acctg_dept_desc']][$row['dept_catg_grp_desc']][$row['dept_category_desc']])) { $group[$row['gmm']][$row['acctg_dept_nbr'] . " - " . $row['acctg_dept_desc']][$row['dept_catg_grp_desc']][$row['dept_category_desc']] = array(); } if(empty($group[$row['gmm']][$row['acctg_dept_nbr'] . " - " . $row['acctg_dept_desc']][$row['dept_catg_grp_desc']][$row['dept_category_desc']][$row['dept_subcatg_desc']])) { $group[$row['gmm']][$row['acctg_dept_nbr'] . " - " . $row['acctg_dept_desc']][$row['dept_catg_grp_desc']][$row['dept_category_desc']][$row['dept_subcatg_desc']] = array(); } $group[$row['gmm']][$row['acctg_dept_nbr'] . " - " . $row['acctg_dept_desc']][$row['dept_catg_grp_desc']][$row['dept_category_desc']][$row['dept_subcatg_desc']]['total_ty_yest_sales'] = $row['total_ty_yest_sales']; $group[$row['gmm']][$row['acctg_dept_nbr'] . " - " . $row['acctg_dept_desc']][$row['dept_catg_grp_desc']][$row['dept_category_desc']][$row['dept_subcatg_desc']]['total_wo_dotcom_ty_yest_sales'] = $row['total_wo_dotcom_ty_yest_sales']; $group[$row['gmm']][$row['acctg_dept_nbr'] . " - " . $row['acctg_dept_desc']][$row['dept_catg_grp_desc']][$row['dept_category_desc']][$row['dept_subcatg_desc']]['east_ty_yest_sales'] = $row['east_ty_yest_sales']; $group[$row['gmm']][$row['acctg_dept_nbr'] . " - " . $row['acctg_dept_desc']][$row['dept_catg_grp_desc']][$row['dept_category_desc']][$row['dept_subcatg_desc']]['central_ty_yest_sales'] = $row['central_ty_yest_sales']; $group[$row['gmm']][$row['acctg_dept_nbr'] . " - " . $row['acctg_dept_desc']][$row['dept_catg_grp_desc']][$row['dept_category_desc']][$row['dept_subcatg_desc']]['west_ty_yest_sales'] = $row['west_ty_yest_sales']; $group[$row['gmm']][$row['acctg_dept_nbr'] . " - " . $row['acctg_dept_desc']][$row['dept_catg_grp_desc']][$row['dept_category_desc']][$row['dept_subcatg_desc']]['dotcom_ty_yest_sales'] = $row['dotcom_ty_yest_sales']; } 这给了我一个数组: $myArray = Array(GMM => Array(acctg_dept_nbr => Array(dept_category_desc => Array(dept_subcatg_desc => Array(value1,value2,value3))))) 我想在每个级别总结值.因此,对于每个acctg_dept_nbr [dept_category_desc] [dept_subcatg_desc],我想将value1,value3求和. GMM级别和dept_subcatg_desc级别相同.总结dept_subcatg_desc级别不是问题.我挖了一下,找到了如何总结dept_category_desc级别,但是在递归应用该方法时遇到了麻烦. 以下是将值放入表中的代码: foreach($group as $gmm => $acctg_dept_nbrs) { echo "<tr class="header"> <td>" . $gmm . "</td>n"; foreach ($acctg_dept_nbrs as $acctg_dept_nbr => $dept_catg_grp_descs) { echo "<tr class="header">n <td style="padding-left: 1em;">" . $acctg_dept_nbr . "</td>n"; foreach($dept_catg_grp_descs as $dept_catg_grp_desc => $dept_category_descs) { echo "<tr class="header">n <td style="padding-left: 2em;">" . $dept_catg_grp_desc . "</td>n"; //echo "<td>" . array_sum(array_walk_recursive($dept_category_descs,function($item) {return $item['total_ty_yest_sales'];})) . "</td>"; foreach($dept_category_descs as $dept_category_desc => $dept_subcatg_descs) { echo "<tr class="header">n <td style="padding-left: 3em;">" . $dept_category_desc . "</td>n"; echo "<td>" . array_sum(array_map(function($item) {return $item['total_ty_yest_sales'];},$dept_subcatg_descs)) . "</td>"; echo "<td>" . array_sum(array_map(function($item) {return $item['east_ty_yest_sales'];},$dept_subcatg_descs)) . "</td>"; echo "<td>" . array_sum(array_map(function($item) {return $item['central_ty_yest_sales'];},$dept_subcatg_descs)) . "</td>"; echo "<td>" . array_sum(array_map(function($item) {return $item['west_ty_yest_sales'];},$dept_subcatg_descs)) . "</td>"; foreach($dept_subcatg_descs as $dept_subcatg_desc => $values) { echo "<tr>n <td style="padding-left: 4em;">" . $dept_subcatg_desc . "</td>n"; $sum = $values['total_ty_yest_sales']; echo "<td>".$sum."</td>"; $sum = $values['east_ty_yest_sales']; echo "<td>".$sum."</td>"; $sum = $values['central_ty_yest_sales']; echo "<td>".$sum."</td>"; $sum = $values['west_ty_yest_sales']; echo "<td>".$sum."</td>"; } } } } } 注释掉的线现在是我的问题.这个: array_sum(array_map(function($item) {return $item['west_ty_yest_sales'];},$dept_subcatg_descs)) 在那个级别工作正常,但不是在更高级别.我也尝试调整此功能无济于事: function array_map_recursive($callback,$array) { foreach ($array as $key => $value) { if (is_array($array[$key])) { $array[$key] = array_map_recursive($callback,$array[$key]); } else { $array[$key] = call_user_func($callback,$array[$key]); } } return $array; } 我怎样才能使这个工作,以便无论水平如何,它将挖掘并总结该部分数组的值? 解决方法function array_map_recursive($callback,$array) { $func = function ($item) use (&$func,&$callback) { return is_array($item) ? array_map($func,$item) : call_user_func($callback,$item); }; return array_map($func,$array); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |