我有一个由 PHP 中的数组形成的树结构,这些树具有以下结构。
array(5) {
["guid"]=>
string(32) "bfd08465daebc6a624f81fb38fdcb357"
["name"]=>
string(7) "Activos"
["parent_guid"]=>
string(32) "3caed17eb39d20aa9d409f2e61d457ff"
["suma"]=>
NULL
["children"]=>
array(1) {
[0]=>
array(5) {
["guid"]=>
string(32) "c0227d82bf3926d0517a0cffce66be31"
["name"]=>
string(14) "Current Assets"
["parent_guid"]=>
string(32) "bfd08465daebc6a624f81fb38fdcb357"
["suma"]=>
NULL
["children"]=>
array(3) {
[0]=>
array(5) {
["guid"]=>
string(32) "c7bc90c45a5319a00f8a64c7ae1a5ca9"
["name"]=>
string(16) "Cuenta de ahorro"
["parent_guid"]=>
string(32) "c0227d82bf3926d0517a0cffce66be31"
["suma"]=>
string(11) "111035.3800"
["children"]=>
array(0) {
}
}
[1]=>
array(5) {
["guid"]=>
string(32) "72a3ed3467cfd24671197ad7d7f9bb40"
["name"]=>
string(17) "Cuenta de cheques"
["parent_guid"]=>
string(32) "c0227d82bf3926d0517a0cffce66be31"
["suma"]=>
string(6) "0.0000"
["children"]=>
array(0) {
}
}
如果一个节点有子节点,那么索引“children”将有一个包含值的嵌套数组。这里的问题是,如何为给定“guid”的每个 child 求和索引“suma”中的所有值?
例如,给定 guid c7bc90c45a5319a00f8a64c7ae1a5ca9,该函数必须返回 111035.3800,因为该子树没有子树。但对于 c0227d82bf3926d0517a0cffce66be31,该函数必须对 Null + 111035.3800 + 0.0000 求和,这些值是给定 guid 及其相应子项的索引“suma”中的值。如果节点有“n”个嵌套子节点,则该函数应迭代所有子节点并对索引“suma”中的值求和。
我已经有一个递归函数,它返回给定 guid 值的子树,但我不知道如何计算总和。
function getChildrenAccounts($array, $parent_guid)
{
if(!is_array($array))
return null;
if(isset($array['guid']) && $array['guid'] == $parent_guid)
return $array['children'];
foreach ($array as $item) {
$return = $this->getChildrenAccounts($item, $parent_guid);
if (!is_null($return))
return $return;
}
return null;
}
如有任何帮助,我们将不胜感激,谢谢
最佳答案
你的问题出在你的函数定义上。您还没有决定您的函数将做什么。
//What is the return value here?
function getChildrenAccounts($array, $parent_guid) {
如果答案是“很多事情”,那么你就有问题了。在您的情况下,您有“null”、一个数组,可能还有一个值(“suma”字段的总和)。
我建议编写一个函数:
function sumChildrenAccounts($array, $parent_guid, &$sum) {
if(!is_array($array)) { return null; }//this needs to be caught as an error!
if(isset($array['guid']) && $array['guid'] == $parent_guid) { //a valid array
foreach ($array['children'] as $child) {
$sum = $this->sumChildrenAccounts($child, $parent_guid, $sum) + $array['suma'];
}
return $sum;
}
return null;//also an error!!!
}
关于php - 从嵌套数组中获取总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10082283/