递归调用
来源:互联网 发布:淘宝iphone7可信度 编辑:程序博客网 时间:2024/06/04 19:54
大家还有别的思路没有
下面是我写的两个递归函数,最终的目的是构造一个表格。我也不知道怎么想的,反正糊里糊涂的写了写,试了试就出来了。
想要感觉自己摸到了递归的边角,重新梳理一下:
function recursionConstructRelation(array $arr, &$result, $index = 0) { ++$index; if (empty($result)) { $result = $arr[0]; } $result = array_flip($result); if (isset($arr[$index])) { foreach ($result as $key => $v) { $result[$key] = $arr[$index]; recursionConstructRelation($arr, $result[$key], $index); } } return $result; } function recursionConstructRows($src, &$dest, array $inKeys = array(), $element = "G") { if ($element != "G") { array_push($inKeys, $element); } foreach ($src as $key => $value) { if (is_array($value)) { recursionConstructRows($value, $dest, $inKeys, $key); } else { $dest[] = array_merge($inKeys, array($key)); } } return $dest; }
原始的数据结构是这样的,它本身是一个二维数组:
$source = array( array( "玫瑰红", "金色", "活力蓝" ), array( "全网通(6GB 64GB)", "全网通(4GB 64GB)", "全网通(6GB 128GB)" ), array( "官方标配", "套餐一", "套餐二" ),)
我最后希望得到的数据结构是下面这样的(我想生成一个table,通过控制rowspan属性来让运营方便明确的添加这个属性的sku信息)。
$dest = array( array("玫瑰红", "全网通(6GB 64GB)", "官方标配"), array("玫瑰红", "全网通(6GB 64GB)", "套餐一"), array("玫瑰红", "全网通(6GB 64GB)", "套餐二"), array("玫瑰红", "全网通(4GB 64GB)", "官方标配"), array("玫瑰红", "全网通(4GB 64GB)", "套餐一"), array("玫瑰红", "全网通(4GB 64GB)", "套餐二"), array("玫瑰红", "全网通(6GB 128GB)", "官方标配"), array("玫瑰红", "全网通(6GB 128GB)", "套餐一"), array("玫瑰红", "全网通(6GB 128GB)", "套餐二"), //......省略)
第一步我考虑建立三个属性的关系,我想先建立这样的关系,将数组变换成下面的形式:
$relation = array( "玫瑰红" => array( "全网通(6GB 64GB)" => array( "官方标配" => "0", "套餐一" => "1", "套餐二" => "2" ), "全网通(4GB 64GB)" => array( "官方标配" => "0", "套餐一" => "1", "套餐二" => "2" ), "全网通(6GB 128GB)" => array( "官方标配" => "0", "套餐一" => "1", "套餐二" => "2" ) ), //....省略)
第一个递归函数用来将数据格式整理成上述结构。正常的执行流程应该是:
$index = 0;$firstPropertys = $resource[$index];$firstPropertys = array_flip($firstPropertys); //反转key和value$index++;if (isset($resource[$index])) { foreach ($firstPropertys as $key => $v) { $firstPropertys[$key] => $resource[$index]; }}
- 退出递归的条件就是
resource[ index]不存在 - 将结果保存在引用变量中
第二个递归函数最终实现了我想要的结果,正常的流程简化如下:
foreach ($relation as $firstK => $firstV) { foreach ($firstV as $secondK => $secondV) { foreach ($secondV as $thirdK => $thirdV) { $dest[] = array($firstK, $secondK, $thirdV) } }}
- 退出递归的时候需要生成table表的每一行数组
- 在每最后一层循环时,需要获取其他层的keys数组,且这个数组应该是值传递
最终的结构就类似于下列:
阅读全文
0 0
- 递归调用
- 递归调用
- 递归调用
- 递归调用
- 递归调用
- 递归调用
- 递归调用
- 递归调用
- 递归调用
- 递归调用
- 递归调用
- 递归调用
- 递归调用
- 递归调用
- 递归调用
- 递归调用
- 递归调用
- 递归调用
- leetcode 289. Game of Life
- 学习uboot前奏之hardware-mmu[s3c2440]
- CDSN转发博客
- SpringBoot--入门篇
- 633. Sum of Square Numbers标题
- 递归调用
- 1042. 字符统计(20)(字符型数据的输入和处理样例
- bzoj2751 [HAOI2012]容易题(数学+快速幂)
- react native初尝试
- 数据结构(绪论)
- R查看帮助、矩阵
- MongoDB + Spark: 完整的大数据解决方案
- 构建乘积数组 剑指offer
- 益智游戏:Twenty(20)