递归数组有问题,希望得到帮助

dnpao 2017-01-03 09:42:25
$data=Array
(
[1] => Array
(
[id] => 1
[name] => aaa
[pid] => 0
[son] => Array
(
[2] => Array
(
[id] => 2
[name] => a1
[pid] => 1
)

[3] => Array
(
[id] => 3
[name] => a2
[pid] => 1
)

[4] => Array
(
[id] => 4
[name] => a3
[pid] => 1
)

[5] => Array
(
[id] => 5
[name] => a4
[pid] => 1
)

)

)

[6] => Array
(
[id] => 6
[name] => bbb
[pid] => 0
[son] => Array
(
[7] => Array
(
[id] => 7
[name] => b1
[pid] => 6
)

[8] => Array
(
[id] => 8
[name] => b2
[pid] => 6
)

)

)

[9] => Array
(
[id] => 9
[name] => ccc
[pid] => 0
[son] => Array
(
[10] => Array
(
[id] => 10
[name] => c1
[pid] => 9
)

)

)

[11] => Array
(
[id] => 11
[name] => ddd
[pid] => 0
)

);

function checked($data,$search,$id='id'){
foreach($data as $k=>$v){
if(in_array($v[$id], $search)){
$v['check'] = 'checked';
}
$arr[$k]=$v;
if(is_array($v['son'])) checked($v['son'],$search);
}
return $arr;
}

$arr=checked($data,array(6,8,11));

echo print_r($arr);


**********************************************************
一个多维数组中,假设我想当 id 等于 6,8,11时,给数组增加一个属性我前端显示, $v['check'] = 'checked';
自己写了一个递归函数但是发现有问题,只有id=6和id=11添加了这个属性,id=8没添加,没检查问题出在哪!!

...全文
366 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2017-01-03
  • 打赏
  • 举报
回复
递归需要承接返回
function checked($data,$search,$id='id'){   
    foreach($data as $k=>$v){
        if(in_array($v[$id], $search)){   
            $v['check'] = 'checked';
        }
        $arr[$k]=$v;   
        if(isset($v['son']) && is_array($v['son'])) $arr[$k]['son'] = checked($v['son'],$search);
    }   
    return $arr;
}
利用引用可简化代码
function checked(&$data,$search,$id='id'){   
    foreach($data as $k=>&$v){
        if(in_array($v[$id], $search)){   
          $v['check'] = 'checked';
        }
        if(isset($v['son']) && is_array($v['son'])) checked($v['son'],$search);
    }   
}
 
checked($data,array(6,8,11));
print_r($data);
傲雪星枫 2017-01-03
  • 打赏
  • 举报
回复
输出:


Array
(
    [1] => Array
        (
            [id] => 1
            [name] => aaa
            [pid] => 0
            [son] => Array
                (
                    [2] => Array
                        (
                            [id] => 2
                            [name] => a1
                            [pid] => 1
                        )

                    [3] => Array
                        (
                            [id] => 3
                            [name] => a2
                            [pid] => 1
                        )

                    [4] => Array
                        (
                            [id] => 4
                            [name] => a3
                            [pid] => 1
                        )

                    [5] => Array
                        (
                            [id] => 5
                            [name] => a4
                            [pid] => 1
                        )

                )

        )

    [6] => Array
        (
            [id] => 6
            [name] => bbb
            [pid] => 0
            [son] => Array
                (
                    [7] => Array
                        (
                            [id] => 7
                            [name] => b1
                            [pid] => 6
                        )

                    [8] => Array
                        (
                            [id] => 8
                            [name] => b2
                            [pid] => 6
                            [check] => checked
                        )

                )

            [check] => checked
        )

    [9] => Array
        (
            [id] => 9
            [name] => ccc
            [pid] => 0
            [son] => Array
                (
                    [10] => Array
                        (
                            [id] => 10
                            [name] => c1
                            [pid] => 9
                        )

                )

        )

    [11] => Array
        (
            [id] => 11
            [name] => ddd
            [pid] => 0
            [check] => checked
        )

)

傲雪星枫 2017-01-03
  • 打赏
  • 举报
回复
这样就可以了。

<?php
$data=array
(
'1' => array
(
'id' => 1,
'name' => 'aaa',
'pid' => 0,
'son' => array
(
'2' => array
(
'id' => 2,
'name' => 'a1',
'pid' => 1,
),

'3' => array
(
'id' => 3,
'name' => 'a2',
'pid' => 1,
),

'4' => array
(
'id' => 4,
'name' => 'a3',
'pid' => 1,
),

'5' => array
(
'id' => 5,
'name' => 'a4',
'pid' => 1,
)

)

),

'6' => array
(
'id' => 6,
'name' => 'bbb',
'pid' => 0,
'son' => array
(
'7' => array
(
'id' => 7,
'name' => 'b1',
'pid' => 6,
),

'8' => array
(
'id' => 8,
'name' => 'b2',
'pid' => 6,
)

)

),

'9' => array
(
'id' => 9,
'name' => 'ccc',
'pid' => 0,
'son' => array
(
'10' => array
(
'id' => 10,
'name' => 'c1',
'pid' => 9,
)

)

),

'11' => array
(
'id' => 11,
'name' => 'ddd',
'pid' => 0
)

);

function checked(&$data,$search,$id='id'){
foreach($data as $k=>$v){
if(in_array($v[$id], $search)){
$data[$k]['check'] = 'checked';
}
if(isset($data[$k]['son']) && is_array($data[$k]['son'])){
checked($data[$k]['son'],$search);
}
}
}

checked($data,array(6,8,11));

print_r($data);
?>

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧