实际开发中需要用到 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($currentlengthlength&&$this->length>0) {
$this->queAdd($param);
}else if($this->length==0)
{
$param=empty($param)?0:$param;
$this->queue[]=$param;
}
else {
for ($i=0;$ilength-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);*/
?>