记某次笔试碰到的一道无限极类试题,当时时间比较紧(满满六页试题),还是手写代码,所以最终写的有点错误。记不住原题了,但是要求都知道,特此记录下来!

试题

有下面一个数组:

$arr = [
'小红' => [
'张三' => null,
'李四' => [
'东东' => [
'一一' => null,
'二二' => [
'小明' => null
]
],
'西西' => null,
],
],
'小绿' => [
'王五' => null,
'赵六' => [
'南南' => null,
],
'孙七' => [
'北北' => null
]
],
'小蓝' => null
];

请补充函数 function getUserStr($arr) {} ,使之结果输出为:

小红: 张三,李四,东东,西西,一一,二二,小明
张三: 无
李四: 东东,西西,一一,二二,小明
东东: 一一,二二,小明
一一: 无
二二: 小明
小明: 无
西西: 无
小绿: 王五,赵六,孙七,南南,北北
王五: 无
赵六: 南南
南南: 无
孙七: 北北
北北: 无
小蓝: 无

答案

function getUserStr($arr) {

    // 将多级上下级关系转为二维
function getList($arr, &$data=[], $key='') {
if ($key && !array_key_exists($key, $data)) $data[$key] = [];
if (is_array($arr)) foreach ($arr as $k => $v) {
if ($key) $data[$key][] = $k;
getList($v, $data, $k);
}
return $data;
}
$list = getList($arr); // 上下级关系对应处理
function getUserSubordinate($list, &$res, $pk, $ck) {
$res[$pk] = array_merge($res[$pk], $list[$ck]);
foreach ($list[$ck] as $key => $value) {
if (array_key_exists($value, $list) && count($list[$value])) {
getUserSubordinate($list, $res, $pk, $value);
}
}
}
$res = [];
foreach ($list as $key => $value) {
$res[$key] = $value;
foreach ($value as $ck => $cv) {
if (array_key_exists($cv, $list) && count($list[$cv])) {
getUserSubordinate($list, $res, $key, $cv);
}
}
} // 拼接字符串
$str = '';
foreach ($res as $key => $value) {
$str .= $key . ': ' . ($value ? implode(',', $value) : '无') . '<br>';
}
return $str;
}

用了两次递归,最终输出结果没有问题,但是总感觉应该有比较简便的方法。留着以后改进吧!!|・ω・`)

最新文章

  1. 获取URL列表,设置代理请求URL,https的加密方式处理
  2. Android系统介绍与框架(转)
  3. uboot和内核波特率不同
  4. ruby代码重构第二课
  5. IntelliJ IDEA 缓存和索引介绍和清理方法
  6. android 各国语言对应的缩写
  7. The Socket API, Part 4: Datagrams
  8. tomcat启动很慢的原因
  9. bzoj1041题解
  10. [转载]Tortoise SVN使用方法,简易图解
  11. 聊聊Spring Cloud版本的那些事儿
  12. webpack介绍 安装 常用命令
  13. gitlab-ci的注意点
  14. MSVCR120.dll丢失问题
  15. Mac环境变量配置错了以后初始化的方法
  16. ExcelReader(解析Excel的工具类)
  17. php -- php控制linux关机、重启、注销
  18. log file sync 事件(转)
  19. WPF 动画 和 色彩 的随笔
  20. 无废话JavaScript(下)

热门文章

  1. linux下显示dd命令的进度
  2. 如何以正确的姿势安装Vue的依赖并且启动下载好的项目
  3. Java 8新特性(一):Lambda表达式
  4. Intelligence Beyond the Edge: Inference on Intermittent Embedded Systems
  5. JMH-大厂是如何使用JMH进行Java代码性能测试的?必须掌握!
  6. Docker 学习笔记(二)
  7. 单元测试与单元测试框架 Jest
  8. oeasy教您玩转linux010201持续输出yes
  9. Photon PUN 一 介绍
  10. 【基础知识】Unity查漏补缺