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,我有一个拼写错误(错误地调用了我的递归函数)