下拉菜单 ---树状展现
2016-07-07 14:01
99 查看
//配合下面方法用 不需直接调用 function make_tree($arr) { if (!function_exists('make_tree1')) { function make_tree1($arr, $parent_id = 0) { $new_arr = array(); foreach ($arr as $k => $v) { if ($v->pid == $parent_id) { $new_arr[] = $v; unset($arr[$k]); } } foreach ($new_arr as &$a) { $a->children = make_tree1($arr, $a->id); } return $new_arr; } } return make_tree1($arr); } //配合下面方法用 不需直接调用 function make_tree_with_namepre($arr) { $arr = make_tree($arr); if (!function_exists('add_namepre1')) { function add_namepre1($arr, $prestr = '') { $new_arr = array(); foreach ($arr as $v) { if ($prestr) { if ($v == end($arr)) { $v->name = $prestr . '└─ ' . $v->name; } else { $v->name = $prestr . '├─ ' . $v->name; } } if ($prestr == '') { $prestr_for_children = ' '; } else { if ($v == end($arr)) { $prestr_for_children = $prestr . ' '; } else { $prestr_for_children = $prestr . '│ '; } } $v->children = add_namepre1($v->children, $prestr_for_children); $new_arr[] = $v; } return $new_arr; } } return add_namepre1($arr); } /* * 无限分类的下拉框表示 * @param $arr 数据源 这里是对象类型 * @param int $depth,当$depth为0的时候表示不限制深度 * @return string * default 默认选择的id */ function make_option_tree_for_select($arr, $default, $depth = 0) { $arr = make_tree_with_namepre($arr); if (!function_exists('make_options1')) { function make_options1($arr, $default, $depth, $recursion_count = 0, $ancestor_ids = '') { $recursion_count++; $str = ''; foreach ($arr as $v) { $value = ""; if ($v->id == $default) { $value = "selected=selected"; } $str .= "<option value='{$v->id}' data-depth='{$recursion_count}' data-ancestor_ids='" . ltrim($ancestor_ids, ',') . "' {$value}>{$v->name}</option>"; if ($v->pid == 0) { $recursion_count = 1; } if ($depth == 0 || $recursion_count < $depth) { $str .= make_options1($v->children,$default, $depth, $recursion_count, $ancestor_ids . ',' . $v->id); } } return $str; } } return make_options1($arr, $default, $depth); }
相关文章推荐
- WebView
- React同构直出原理浅析
- iOS常量(const)、enum以及宏(#define)
- Oracle 跨用户查看视图
- Android 三大图片缓存原理、特性对比
- 1029. Median (25)
- Android apk 签名总结
- 使用application传递全局变量
- iOS-多线程之GCD
- javascript 灵异现象之 if else 先后执行
- javascript 灵异现象之 if else 先后执行
- malloc()与calloc区别【转】
- RabbitMQ - 实例操作
- Android手机摇一摇功能的简单实现
- 6.包管理和代码调试
- html5 form上传值
- 关于安装cocoapods遇到的一些坑(ERROR: Error installing cocoapods: activesupport requires Ruby version >= 2.2)
- 解决Ubuntu中WPS无法使用中文输入法问题
- 一个程序员的产品思维
- 在数组中搜索数据用 filteredArrayUsingPredicate