HEX
Server: nginx/1.28.1
System: Linux 10-41-63-61 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64
User: www (1001)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/my.esfyn.top/app/Service/MyService.php
<?php


namespace App\Service;


class MyService
{

    /**
     * 生成树形数据结构
     * @param $data
     * @param $pid
     * @return array
     */
    public function tree($data = [], $pid = 0): array
    {
        $result = [];

        if (isset($data[$pid]) && is_array($data[$pid])) {

            collect($data[$pid])->each(function ($item) use (&$result, $pid, $data) {
                $item['child'] = $this->tree($data, $item['id']);
                $result[] = $item;
            });

        }

        return $result;
    }

    /**
     * 生成树形数据结构(用于下拉框)
     * @param array $data
     * @param int $pid
     * @param string $prefix
     * @return array
     */
    public function treeForSelect($data = [], $pid = 0, $prefix = ''): array
    {
        $result = [];

        if (isset($data[$pid]) && is_array($data[$pid])) {

            collect($data[$pid])->each(function ($item) use (&$result, $pid, $data, $prefix) {

                $result[] = ['id' => $item['id'], 'name' => $prefix . $item['name']];
                $child = $this->treeForSelect($data, $item['id'], $prefix . "__");

                if (is_array($child)) {

                    $result = array_merge($result, $child);
                }
            });

        }

        return $result;
    }

    /**
     * 获取树形数据ID
     * @param $data
     * @param $pid
     * @param $self
     * @return array
     */
    public function childIds($data = [], $pid = 0, $self = false): array
    {
        $result = $self ? [$pid] : [];

        if (isset($data[$pid]) && is_array($data[$pid])) {

            collect($data[$pid])->each(function ($item) use (&$result, $pid, $data) {

                $result[] = $item['id'];
                $items = $this->childIds($data, $item['id']);

                if ($items) {
                    $result = array_merge($result, $items);
                }
            });

        }

        return $result;
    }
}