php面试题之多维数组排序组合

//存在一个多维数组
//遍历获取到 所有顺序的组合可能
$arrayname = [
                '1'=>'A',
                '2'=>'B',
                '3'=>array('C1','C2'),
                '4'=>array('D1','D2'),
                '5'=>'E',
                '6'=>'F'
            ];
// arrayname 最后组合的结果是4个字符串:

//  A_B_C1_D1_E_F   A_B_C1_D2_E_F  A_B_C2_D1_E_F   A_B_C2_D2_E_F

没有找到好的解决办法 自己使用最笨的方法一个个追加了。哎

<?php
//存在一个多维数组
//遍历获取到 所有顺序的组合可能
$arraynameg = [
				'1'=>'A',
				'2'=>'B',
				'3'=>array('C1','C2'),
				'4'=>array('D1','D2'),
				'5'=>'E',
				'6'=>'F'
			];
// arrayname 最后组合的结果是4个字符串:

//  A_B_C1_D1_E_F   A_B_C1_D2_E_F  A_B_C2_D1_E_F   A_B_C2_D2_E_F
// 生成后的数组
$newarrg=[];

/*思路:
* 1、遍历数组 拼接字符 保存到 newarr中
* 2、遇到二级数组后 遍历二级数组 拼接新的字符到 newarr中
* 3、直到数组遍历玩 拼接字符到newarr中
*/
function diguiarr($savearr,$readarr){
	$newarr = $savearr;
	$arrayname = $readarr; //在里面声明为全局变量
	
	$isover = false;
	// 变量生成的
	if (count($newarr)>0) {
		$arritem=[];
		$jieindex = 0;//对数组继续截取
		foreach ($newarr as $arrkey => $arrval) {
			$index = 0;
			$arrstr = $arrval;
			foreach ($arrayname as $key => $value) {
				
				if (is_array($value)) {
					//截取后面的数组
					$arritem2=[];
					$arrstr2 = '';
					foreach ($value as $key2 => $value2) {
						$arrstr2 = $arrstr . $value2 . '_';
						array_push($arritem, $arrstr2);
					}
					
					$jieindex = $index + 1;
					break;
				}else if( ($index+1) == count($arrayname)){
					$arrstr = $arrstr .$value;
					array_push($arritem, $arrstr);
					// $arrayname=[];
					$isover = true;
				}else{
					$arrstr = $arrstr .$value . '_';
					
				}
				$index = $index + 1;
			}
			// 

		}
		$arrayname = array_slice($arrayname, $jieindex,count($arrayname));
		$newarr = $arritem;
	}else{
		$index = 0;
		$arrstr = '';
		foreach ($arrayname as $key => $value) {

			if (is_array($value)) {
				//截取后面的数组
				$arritem2=[];
				$arrstr2 = '';
				foreach ($value as $key2 => $value2) {
					$arrstr2 = $arrstr . $value2 . '_';
					array_push($newarr, $arrstr2);
				}
				$index = $index + 1;
				$arrayname = array_slice($arrayname, $index,count($arrayname));
				break;
			}else{
				$arrstr = $arrstr .$value . '_';
				
			}
			$index = $index + 1;
		}

	}
	// echo "********************";
	// var_dump($newarr);
	// echo ">>>>>>>>>>>>>>>>>>>>>";
	// var_dump($arrayname);
	//数组内容为获取完 递归继续获取
	//递归获返回值方法
	if ($isover == false) {
		return diguiarr($newarr,$arrayname);
	}else{
		return $newarr;
	}
	

}
$newarrg = diguiarr($newarrg,$arraynameg);

var_dump($newarrg);

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值