递归搜索数组和求和字段

时间:2014-02-26 17:48:02

标签: php recursion

我正在尝试编写一个递归函数,它将遍历数组数组并对特定字段求和。这是一个数组的例子:

{
  "68": {
    "10": [
      {
        "id": "3333",
        "sumTHis": "5"
      }
    ]
  },
  "69": {
    "45": [
      {
        "id": "3333",
        "sumTHis": "5"
      }
    ],
    "50": [
      {
        "id": "3330",
        "sumTHis": "5"
      },
      {
        "id": "3331",
        "sumTHis": "5"
      },
      {
        "id": "3332",
        "sumTHis": "5"
      },
      {
        "id": "3333",
        "sumTHis": "5"
      }
    ]
  }
}

问题是数组可能是任意数量的子数组。最后,我希望能够在整个数组中对所有“sumTHis”节点求和。到目前为止我的代码是:

//in body
$sumThis= recurse_get_total($array, 'sumTHis');


//recursive function
function recurse_get_total($report_data, $valId, $total = 0){
    try{
            foreach ($report_data as $key => $value) {
                if(is_array_of_arrays($value)){
                    recurse_get_total($value, $valId, $total);
                }else{
                   $total = $total + $value[$valId];
                   return $total;
                }
            }
        return $total;
    }catch(Exception $err){
        throw $err;
    }
}

function is_array_of_arrays($isArray){
    try{
        if(is_array($isArray)){
            foreach($isArray as $key => $value){
                if(!is_array($value)){
                    return false;
                }
            }
            return true;
        }
    }catch(Exception $err){
        throw $err;
    }
}

这个函数开始遍历数组但在第一个之后被踢出并返回0.任何人都可以帮忙吗?

由于 杰森

1 个答案:

答案 0 :(得分:1)

关于这个问题我用“array_walk_recursive”设置了一些东西。看到你想添加一些独立于数组深度的东西,这似乎有效。 它不是用你所拥有的东西来解决它,但也许这种不同的方法会让你在那里。

$sum = 0;

$array = array(
    "one" => array(
        "day" => "tuesday",
        "week" => "20",
        "findthis" => 10
    ),
    "two" => array("subone" => array(
            "some" => "one",
            "findthis" => 23
        )),
    "deeperthree" => array("subtwo" => array("deeper" => array(
                "one" => "entry",
                "findthis" => 44
            )))
);

function callback($val, $key, $arg) {

    if ($key == "findthis") {
        $arg[0]($val, $arg[1]);
    }

};

$function = function($num, &$sum) {
    $sum = $sum + $num;
    echo $sum . " ";
};

array_walk_recursive($array, "callback", array( $function, &$sum ));

结果: 10 33 77