Arrays.php 2.0 KB
<?php

namespace App\Helper;


/**
 * 验证
 */
class Arrays
{
    /**
     * 把返回的数据集转换成Tree
     * @param $list
     * @param string $pk
     * @param string $pid
     * @param string $child
     * @param int $root
     * @return array
     * @author zbj
     * @date 2023/4/13
     */
    public static function listToTree($list, $pk = 'id', $pid = 'pid', $child = 'children', $root = 0)
    {
        // 创建Tree
        $tree = array();
        if (is_array($list)) {
            // 创建基于主键的数组引用
            $refer = array();
            foreach ($list as $key => $data) {
                $refer[$data[$pk]] = &$list[$key];
            }
            foreach ($list as $key => $data) {
                // 判断是否存在parent
                $parentId = $data[$pid];
                if ($root == $parentId) {
                    $tree[] = &$list[$key];
                } else {
                    if (isset($refer[$parentId])) {
                        $parent = &$refer[$parentId];
                        $parent[$child][] = &$list[$key];
                    }
                }
            }
        }
        return $tree;
    }


    /**
     * 分隔字符串成数组并按照指定的函数过滤数组
     * @param $string
     * @param string $filters
     * @param string $delimiter
     * @return array|false|string[]
     * @author zbj
     * @date 2023/4/13
     */
    public static function splitFilterToArray($string, $filters = 'trim', $delimiter = ',')
    {
        if (!$string) {
            return [];
        }
        $data = !is_array($string) ? explode($delimiter, $string) : $string;
        $filters = explode(',', $filters);
        if (!$filters) {//没有值或者没有过滤函数
            return $data;
        }
        //过滤
        foreach ($filters as $fun) {
            if (!function_exists($fun)) {
                continue;
            }
            $data = array_map($fun, $data);
        }

        return $data;
    }
}