ListProcess.php 6.75 KB
<?php

namespace Plugin\DataProcess;
use Plugin\Helpers;

/**
 * 列表数据处理类
 */
class ListProcess
{

    /**
     * 返回商品和过滤数据
     * 
     * @param $data
     * @return array 处理之后的商品数据
     */
    public static function getListData($data)
    {
        $result = array('new'=>array(), 'filter'=>array());

        if(isset($data['product_list']))
        {
            $result['new'] = self::getProductData($data['product_list']);
        }
        if(isset($data['filter']))
        {
            $result['filter'] = self::getFilterData($data['filter']);
        }

        return $result;
        
    }

    /**
     * 处理列表商品数据
     * 
     * @param $data
     * @return array 处理之后的商品数据
     */
    public static function getProductData($data)
    {
        // 处理商品
        $products = array();

        foreach ($data as $value) 
        {
            $products[] = Helpers::formatProduct($value);
        }

        return $products;
        
    }

    /**
     * 处理筛选数据
     * 
     * @param $data
     * @return array 处理之后的筛选数据
     */
    public static function getFilterData($data)
    {
        // 过滤条件数据
        $filters = array('classify'=>array());

        foreach ($data as $key => $val) {
            if(empty($val))
            {
                continue;
            }
            if (!is_callable("self::$key")) {
                continue;
            }
            $build = self::$key($val);
            $filters['classify'][] = $build;
        }

        return $filters;
        
    }

    private static function brand($data)
    {
        $result = array(
            'title' => '品牌',
            'name' => '所有品牌',
            'subs' => array(
                array(
                    'chosed' => true,
                    'dataId' => 0,
                    'name' => '所有品牌'
                )
            )
        );

        // 对品牌数据按照品牌字母进行排序
        self::sortArrByField($data, 'brand_alif');

        foreach ($data as $one) {
            $brand = array();
            $brand['dataId'] = $one['id'];
            $brand['name'] = $one['brand_name'];

            $result['subs'][] = $brand;
        }

        return $result;
    }

    private static function color($data)
    {
        $result = array(
            'title' => '颜色',
            'name' => '所有颜色',
            'subs' => array(
                array(
                    'chosed' => true,
                    'dataId' => 0,
                    'name' => '所有颜色'
                )
            )
        );

        foreach ($data as $one) {
            $color = array();
            $color['dataId'] = $one['color_id'];
            $color['name'] = $one['color_name'];

            $result['subs'][] = $color;
        }

        return $result;
    }

    private static function discount($data)
    {
        $result = array(
            'title' => '折扣',
            'name' => '所有商品',
            'subs' => array(
                array(
                    'chosed' => true,
                    'dataId' => 0,
                    'name' => '所有商品'
                )
            )
        );

        foreach ($data as $one) {
            $discount = array();
            $discount['dataId'] = $one['count'];
            $discount['name'] = $one['name'] .'折商品';

            $result['subs'][] = $discount;
        }

        return $result;
    }

    private static function gender($data)
    {
        $result = array(
            'title' => '性别',
            'name' => '所有性别',
            'subs' => array(
                array(
                    'chosed' => true,
                    'dataId' => 0,
                    'name' => '所有性别'
                ),
                array(
                    'dataId' => 1,
                    'name' => '男'
                ),
                array(
                    'dataId' => 2,
                    'name' => '女'
                ),
            )
        );

        return $result;
    }

    private static function group_sort($data)
    {
        $result = array(
            'title' => '品类',
            'name' => '所有品类',
            'subs' => array(
                array(
                    'chosed' => true,
                    'dataId' => 0,
                    'name' => '所有品类'
                )
            )
        );

        foreach ($data as $one) {
            $category = array();
            $category['dataId'] = $one['category_id'];
            $category['name'] = $one['category_name'];

            // 子品类
            if(isset($one['sub']))
            {
                $category['subs'] = array();
                foreach ($one['sub'] as $single) {
                    $subitem = array();
                    $subitem['dataId'] = $single['category_id'];
                    $subitem['name'] = $single['category_name'];

                    $category['subs'][] = $subitem;
                }
            }

            $result['subs'][] = $category;
        }

        return $result;
    }

    private static function priceRange($data)
    {
        $result = array(
            'title' => '价格',
            'name' => '所有价格',
            'subs' => array(
                array(
                    'chosed' => true,
                    'dataId' => 0,
                    'name' => '所有价格'
                )
            )
        );

        foreach ($data as $one) {
            $price = array();
            $price['name'] = $one;

            $result[] = $price;
        }

        return $result;
    }

    private static function size($data)
    {
        $result = array(
            'title' => '尺码',
            'name' => '所有尺码',
            'subs' => array(
                array(
                    'chosed' => true,
                    'dataId' => 0,
                    'name' => '所有尺码'
                )
            )
        );

        foreach ($data as $one) {
            $size = array();
            $size['dataId'] = $one['size_id']; 
            $size['name'] = $one['size_name'];

            $result['subs'][] = $size;
        }

        return $result;
    }

    /**
     * 按照数组中指定字段排序二维数组
     * 
     * @param  array  &$array 需要排序的数组
     * @param  string  $field  字段名称
     * @param  boolean $desc   时候降序排列,默认为false
     */
    private static function sortArrByField(&$array, $field, $desc = false){
        $fieldArr = array();
        foreach ($array as $k => $v) {
            $fieldArr[$k] = $v[$field];
        }
        $sort = $desc == false ? SORT_ASC : SORT_DESC;
        array_multisort($fieldArr, $sort, $array);
    }
}