Files
2026-04-14 17:46:22 +08:00

135 lines
4.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// +----------------------------------------------------------------------
// | likeshop开源商城系统
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
// | gitee下载https://gitee.com/likeshop_gitee
// | github下载https://github.com/likeshop-github
// | 访问官网https://www.likeshop.cn
// | 访问社区https://home.likeshop.cn
// | 访问手册http://doc.likeshop.cn
// | 微信公众号likeshop技术社区
// | likeshop系列产品在gitee、github等公开渠道开源版本可免费商用未经许可不能去除前后端官方版权标识
// | likeshop系列产品收费版本务必购买商业授权购买去版权授权后方可去除前后端官方版权标识
// | 禁止对系统程序代码以任何目的,任何形式的再发布
// | likeshop团队版权所有并拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeshop.cn.team
// +----------------------------------------------------------------------
namespace app\common\server;
/**
* 数组转换 服务类
* Class ArrayServer
* @Author FZR
* @package app\common\basics
*/
class ArrayServer
{
/**
* Notes: 线性结构转换成树形结构
* @param $data 线行结构数组
* @param string $sub_key_name 自动生成子数组名
* @param string $id_name 数组id名
* @param string $parent_id_name 数组祖先id名
* @param int $parent_id 此值请勿给参数
* @return array
* @author 段誉(2021/4/9 15:12)
*/
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;
}
/**
* Notes: 多级线性结构排序
* @param $data
* @param string $symbol
* @param string $name
* @param string $id_name
* @param string $parent_id_name
* @param int $level
* @param int $parent_id
* @return array
* * 转换前:
* [{"id":1,"pid":0,"name":"a"},{"id":2,"pid":0,"name":"b"},{"id":3,"pid":1,"name":"c"},
* {"id":4,"pid":2,"name":"d"},{"id":5,"pid":4,"name":"e"},{"id":6,"pid":5,"name":"f"},
* {"id":7,"pid":3,"name":"g"}]
* 转换后:
* [{"id":1,"pid":0,"name":"a","level":1},{"id":3,"pid":1,"name":"c","level":2},{"id":7,"pid":3,"name":"g","level":3},
* {"id":2,"pid":0,"name":"b","level":1},{"id":4,"pid":2,"name":"d","level":2},{"id":5,"pid":4,"name":"e","level":3},
* {"id":6,"pid":5,"name":"f","level":4}]
* @author 段誉(2021/4/12 16:44)
*/
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;
}
/**
* User: 意象信息科技 lr
* Desc: 表单多维数据转换
* 例:
* 转换前:{"x":0,"a":[1,2,3],"b":[11,22,33],"c":[111,222,3333,444],"d":[1111,2222,3333]}
* 转换为:[{"a":1,"b":11,"c":111,"d":1111},{"a":2,"b":22,"c":222,"d":2222},{"a":3,"b":33,"c":3333,"d":3333}]
* @param $arr array 表单二维数组
* @param $fill boolean fill为false返回数据长度取最短反之取最长空值自动补充
* @return array
*/
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;
}
}