一个php链式操作的demo

php

浏览数:199

2019-1-7

AD:资源代下载服务


chain.php

<?php
/**
 * 该类的目标不是写一个排序,而是怎样实现一个链式操作
 * 提供了两种排序方法,可以任意使用,体现出链式操作的方便性
 */
class chain{
    
    /**
     * 要排序的数组
     */
    protected $arr = [];
    
    /**
     * 排序类型,正序和倒序,asc正序,desc倒序
     */
    protected $type = "asc";
    
    /**
     * 得到数据源
     +-----------------------------------------
     * @param array $arr 得到要排序的数组
     * @return this
     */
    public  function data($arr){
        $this->arr = $arr;
        return $this;
    }
    
    /**
     * 实现排序规则
     +-----------------------------------------------
     * @param int $type 排序规则,0为倒序,1为正序
     * @return this
     */
    public function order($type){
        $this->type = $type;
        return $this;
    }
    
    /**
     * 处理排序功能,冒泡排序法
     */
    public function bubble(){
        for($i = 0,$k = count($this->arr); $i < $k; $i++) {
            for ($j = $i + 1;$j < $k; $j++) {
                if($this->type == 'desc'){
                    if($this->arr[$i] < $this->arr[$j]){
                        $temp = $this->arr[$j];
                        $this->arr[$j] = $this->arr[$i];
                        $this->arr[$i] = $temp;
                    }
                }else{
                    if($this->arr[$i] > $this->arr[$j]){
                        $temp = $this->arr[$j];
                        $this->arr[$j] = $this->arr[$i];
                        $this->arr[$i] = $temp;
                    }
                }
            }
        }
        return $this->arr;
    }
    
    /**
     * 使用PHP内置函数排序
     */
    public function sorts(){
        if($this->type == 'desc'){
            arsort($this->arr);
        }else{
            asort($this->arr);
        }
        return $this->arr;
    }
}

$chain = new chain();
$result = $chain->data([10,27,3,55,67,125,7,99,6,8])->order("asc")->sorts();
print_r($result);