Php 递归搜索数组和和字段

Php 递归搜索数组和和字段,php,recursion,Php,Recursion,我正在尝试编写一个递归函数,它将迭代一个数组数组并对一个特定字段求和。以下是一个数组示例: { "68": { "10": [ { "id": "3333", "sumTHis": "5" } ] }, "69": { "45": [ { "id": "3333", "sumTHis": "5" } ], "50": [

我正在尝试编写一个递归函数,它将迭代一个数组数组并对一个特定字段求和。以下是一个数组示例:

{
  "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。有人能帮忙吗

谢谢
jason

关于这个问题,我用“array\u walk\u 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 ));

结果:103377

递归是如何实现的?这不是一个数组,而是一个JSON字符串。是的,我知道这是一个JSON字符串。我取了数组并对其进行编码,以使数组成为一个字符串,以便轻松地通过它进入这个问题抱歉,abbiya,我有一个拼写错误(错误地调用了我的递归函数)