<?php
/**
 *
 *User:Administrator
 *Date:2021/10/3
 */

namespace app\common\lib;

class Arr
{
    /**
     * 数组分页显示
     * @param $array:数组
     * @param $page_number:当前页码
     * @param string $items:每页显示几条
     * @return array
     */
    public function Arr_page($array,$page_number,$items='')
    {
        if ($items) {
            $page_total = ceil(count($array) / $items);//总共有多少页
            $start= ($page_number-1)*$items;                  //计算偏移量
            $data=array_slice($array, $start, $items);
        }else{
            $page_total=1;
            $data = array_slice($array, 0);//如果不存在每页数量则全部显示
        }
        //todo 分页功能可以更加完善点，在controller里添加参数认证，这里可以再写一次
        return [
            'page'=>[
                'total'=>$page_total,//总页数
                'current'=>$page_number,//当前页码
                'items'=>$items,
            ],
            'data'=>$data,
        ];
    }

    /**
     *移除二维数组中不要的字段
     * @param $arr
     * @param ...$args
     * @return mixed
     */
    public function Arr_remove($arr, ...$args)
    {
        foreach ($arr as $k => &$v) {
            foreach ($args as $a => $b) {
                unset($v[$b]);
            }
        }
        return $arr;
    }
    /**
     * 返回数组中指定多列
     * @param $array:需要取出数组列的多维数组
     * @param null $column_keys:要取出的列名，逗号分隔，如不传则返回所有列
     * @param null $index_key:作为返回数组的索引的列
     * @return array
     */
    function Arr_columns($array, $column_keys=null, $index_key=null){
        $result = array();
        $keys =isset($column_keys)? explode(',', $column_keys) : array();
        if($array){
            foreach($array as $k=>$v){
                // 指定返回列
                if($keys){
                    $tmp = array();
                    foreach($keys as $key){
                        $tmp[$key] = $v[$key];
                    }
                }else{
                    $tmp = $v;
                }
                // 指定索引列
                if(isset($index_key)){
                    $result[$v[$index_key]] = $tmp;
                }else{
                    $result[] = $tmp;
                }
            }
        }
        return $result;
    }

    /**
     * 数组树状化
     * @param $arr
     * @param $parent_id
     * @return array
     */
    function Arr_tree($arr,$parent_id){
        $tmp_arr=[];
        foreach ($arr as $k=> $v){

            if($v['parent_id']==$parent_id){
                unset($arr[$k]);
                $v['children']=$this->Arr_tree($arr, $v['product_code']);
                $tmp_arr[]=$v;
            }
        }
        return $tmp_arr;
    }
}