php多维数组转以为数组

/**
 * 多维数组转换成以为数组输出
 * 例如:
 * arr[
 * '张三'=>[
 *      '李四' => null,
 *      '王五' => [
 *          '刘三' => null,
 *          '李白' => null,
 *      ],
 * ],
 * '可乐'=>[
 *      '山楂' => null,
 *      '水果' => [
 *          '梨' => [
 *              '酥梨'=>null,
 *              '雪花梨' => null,
 *          ],
 *          '香蕉' => null,
 *      ],
 * ],
 *
 * 输出结果为:
 * 张三:李四,王五,刘三,李白
 * 李四:
 * 王五:刘三,李白
 * 刘三:
 * 李白:
 * 可乐:山楂,水果,梨,酥梨,雪花梨,香蕉
 * 山楂:
 * 水果:梨,酥梨,雪花梨,香蕉
 * 梨:酥梨,雪花梨
 * 酥梨:
 * 雪花梨:
 * 香蕉:
 **/
$arr = [
    '张三' => [
        '李四' => null,
        '王五' => [
            '小白' => null,
            '小美' => null,
        ],
    ],
    '六六' => [
        '菠萝' => null,
        '水果' => [
            '苹果' => null,
            '瓜' => [
                '西瓜' => null,
                '南瓜' => null,
            ],
            '葡萄' => null,
        ],
    ],
];

$res = [];
bbc($arr, $res);
print_r($res);

function bbc($v,&$isArr,$k=[]){
    $c = 0;
	$max_depth = array_depth($v);
    foreach ($v as $key => $value) {
        if(!$k){
            $isArr[$key] = $key.':'; 
        }else{
            foreach ($k as $v1) {
                $isArr[$key] = $key.':'; 
                $isArr[$v1] .= $key.',';
            }
        }
        if($value && is_array($value)){
            $c++;
            $k[] = $key;
            bbc($value,$isArr,$k);
            $k=[];
        }
    }
    if($c == $max_depth){
        foreach ($v as $key => $value) {
            unset($isArr[$key]);
        }
    }  
}

//计算数组的深度
function array_depth($arr) {
	$max_depth = 1;
	foreach ($arr as $value) {
		if (is_array($value)) {
			$depth = array_depth($value) + 1;
			if ($depth > $max_depth) {
				$max_depth = $depth;
			}
		}
	}
	return $max_depth;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值