123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- <?php
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- namespace app\common\server;
-
-
-
- class ArrayServer
- {
-
-
-
- public static function linear_to_tree($data, $sub_key_name = 'sub', $id_name = 'id', $parent_id_name = 'pid', $parent_id = 0)
- {
- $tree = [];
- foreach ($data as $row) {
- if ($row[$parent_id_name] == $parent_id) {
- $temp = $row;
- $temp[$sub_key_name] = self::linear_to_tree($data, $sub_key_name, $id_name, $parent_id_name, $row[$id_name]);
- $tree[] = $temp;
- }
- }
- return $tree;
- }
-
-
-
-
- public static function multilevel_linear_sort($data, $symbol = '', $name = 'name', $id_name = 'id', $parent_id_name = 'pid', $level = 1, $parent_id = 0)
- {
- $result = [];
- $this_symbol = '';
- for ($i = 0; $i < $level; $i++) {
- $this_symbol .= $symbol;
- }
- foreach ($data as $key => $row) {
- if ($row['pid'] == $parent_id) {
- $row['level'] = $level;
- $row[$name] = $this_symbol . $row['name'];
- $result[] = $row;
- $pid = $row['id'];
- unset($data[$key]);
- $child_data = self::multilevel_linear_sort($data, $symbol, $name, $id_name, $parent_id_name, ($level + 1), $pid);
- foreach ($child_data as $child_row) {
- $result[] = $child_row;
- }
- }
- }
- return $result;
- }
-
-
-
-
-
- public static function form_to_linear($arr, $fill = false)
- {
- $keys = [];
- $count = $fill ? 0 : PHP_INT_MAX;
- foreach ($arr as $k => $v) {
- if (is_array($v)) {
- $keys[] = $k;
- $count = $fill ? max($count, count($v)) : min($count, count($v));
- }
- }
- if (empty($keys)) {
- return [];
- }
- $data = [];
- for ($i = 0; $i < $count; $i++) {
- foreach ($keys as $v) {
- $data[$i][$v] = isset($arr[$v][$i]) ? $arr[$v][$i] : null;
- }
- }
- return $data;
- }
-
-
- }
|