- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个关联数组,它是我使用以下代码从 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、value2、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);
}
关于php - 递归地应用 array_map(array_walk_recursive?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22204254/
我有一个菜单数组,它是一个多维数组,我想对每个项目做一些事情,所以我尝试了 array_walk_recursive。这是菜单: $menu = array( array( '
此代码有效,但 $vars 无法在 call() 函数中定义。为什么 $vars 不能传递给 array_walk_recursive()? class lib{ private $libra
此代码有效,但 $vars 无法在 call() 函数中定义。为什么 $vars 不能传递给 array_walk_recursive()? class lib{ private $libra
我如何使用 array_walk_recursive() 而不是这个: function check_value($val){ if(is_array($val)){ foreach($v
只是单纯的好奇。我在 Google 上找不到任何东西,我绝对不想深入研究 PHP 源代码。 是否array_walk_recursive实现尾调用优化? 最佳答案 简答,不:) 另请参阅:https:
如何使用 array_walk_recursive 修改键和值?? 这里只有值被编码 function _utf8_encode($arr){ array_walk_recursive($ar
array_walk_recursive 对数组中的每个成员递归地应用用户函数 基本语法 bool array_walk_recursive ( array &$input , call
我有一个关联数组,它是我使用以下代码从 ODBC 查询创建的: while ($row=odbc_fetch_array($oexec)) { if(empty($gr
我使用以下函数来验证搜索词是否在我的文件夹的文件名中。 $files2=list_files("documents/minelli"); Class Commentaire_filter{
array_walk_recursive($arr, function(&$val, $key){ if($val == 'smth'){ unset($val);
这是我在 php 中的一个类的简化版本: class someClass { public function edit_array($array) { array_walk_recu
我想对 SimpleXML 对象中的每个节点应用一个函数。 ABC DEF GHI JKL //函数reverseText($str){}
我已经查看了这里的一些答案,但似乎没有使用这种方法? 我有一个项目数组,项目是对象。该对象可以有一个键,它是“children”,“children”是一个对象数组等。 有什么办法可以实现吗? 示例:
一段时间以来,我一直在使用“传统”递归函数来展平多维数组,例如 $baseArray = array(array('alpha'), array('beta','
这个问题在这里已经有了答案: In PHP, what is a closure and why does it use the "use" identifier? (6 个答案) 关闭 3 年前。
我有以下代码,我想摆脱调用时间传递引用,(从 5.2 转换为 5.3)但我不确定正确的方法是什么这将是(类,全局变量,?) 这是一个应该包含所有内容的键盘 http://codepad.org/omb
我有一个深度多维数组,需要提取特定键的值。我发现 array_walk_recursive 函数将是我的最佳选择。我只需要第一次出现。 我的数组看起来像这样 - (除了更复杂) Array (
我尝试通过引用 Phps array_walk_recursive 传递第三个参数 $field = 'foo'; array_walk_recursive($config, function($va
我的 mysql 连接使用面向对象的风格,但是如果我这样写: array_walk_recursive($_POST, array($mysqli, 'real_escape_string')); 我
我是一名优秀的程序员,十分优秀!