现在的位置: 首页 > 综合 > 正文

PHP 实现队列类 仅供参考

2017年12月20日 ⁄ 综合 ⁄ 共 2013字 ⁄ 字号 评论关闭

实际开发中需要用到 PHP 类似队列的功能 于是乎 写了下面的类 写的比较仓卒 有BUG  欢迎Email 我,学习交流仅供参考。

/**
 * PHP Class for queue
 * @author yangqijun@live.cn
 * @copyright DataFrog Beijingbei  Ltd. 2011-07-25
 */
class Queue {

    public  $length=12;
    public  $queue  = array();  //  if String like this "22,23,24"    convert to array to do queue
    public  $delimiter=',';

    function __construct($queue=array())
    {
        $this->queue=$queue;
    }

    /**
     * @desc start queue
     * @param String  $param  new queue element
     */
    public function run($param)
    {

        if(!is_array($this->queue)){
            $this->strToQue();
        }
        $currentlength=$this->countqueue();  //Count  the  queue length
        echo $this->length; 
        if($currentlength<$this->length&&$this->length>0) {
            $this->queAdd($param);
        }else if($this->length==0)
        {
            $param=empty($param)?0:$param;
            $this->queue[]=$param;
        }
        else {
          
            for ($i=0;$i<$currentlength-$this->length-1;$i++)
            {
                $this->queRemove();
            }
            $this->queAdd($param);
        }
            
        return $this->queue;
            
    }
    /**
     * String like this "22,23,24"  convert to array to do queue
     * @param String $string
     * @param String $delimiter
     */
    public function strToQue (){

        if (empty($this->queue))
        {
            $this->queue=array();
        }
        else
        {
            $this->queue=explode($this->delimiter,$this->queue);
        }
            
            
    }

    /**
     * insert $node into queue
     * @param string $node
     */
    private function queAdd($node){
            
        array_push($this->queue,$node);
        $this->countqueue();
    }
    private function queRemove(){
        $node = array_shift($this->queue);
        $this->countqueue();
        return $node;
    }
    private function countqueue(){
        $currentlength= count($this->queue);

        return $currentlength;
    }
    function __destruct()
    {
        unset($this->queue);
    }
}

//example
/*$str='88|89|90';
$obj=new Queue ($str);
$obj->length=8;  // 队列元素长度 
$obj->delimiter='|';  //如果队列是字符串,则元素直接的分隔符为|
$a=$obj->run('91');   //要添加到队列中的元素
$a=$obj->run('92'); 
$a=$obj->run('93'); 
$a=$obj->run('94'); 
print_r($a);*/


?>

 

抱歉!评论已关闭.