今天无意间看到一道面试题是要实现PHP的双向队列的,虽然现在我还不知道队列具体的意义,但是起码知道了它是怎么回事。简单的PHP双向队列:
class queue { protected $_storage = array(); //入队头 public function unshift($element){ return array_unshift($this->_storage,$element); } //入队尾 public function push($element){ return array_push($this->_storage, $element); } //出头 public function shift(){ return array_shift($this->_storage); } //出尾 public function pop(){ return array_pop($this->_storage); } //队列长度 public function length(){ return count($this->_storage); } }
这里用到了很多内置的PHP函数,具体如下(注意以下所有的函数都是引用传递):
int array_unshift ( array &$array
, mixed $var
[, mixed $...
] )
作用:array_unshift() 将传入的单元插入到 array
数组的开头。注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。
参数:①被插入的数组。②插入单元。
返回值:返回 array
数组新的单元数目。
例子:
int array_push ( array &$array
, mixed $var
[, mixed $...
] )
作用:array_push() 将 array
当成一个栈,并将传入的变量压入 array
的末尾。array
的长度将根据入栈变量的数目增加。效果类似:$array[] = $var;
参数和返回值都是和上面的函数一样。 注意:如果用 array_push() 来给数组增加一个单元,还不如用 $array[] = ,因为这样没有调用函数的额外负担。
例子如下:
mixed array_shift ( array &$array
)
作用:array_shift() 将 array
的第一个单元移出并作为结果返回,将 array
的长度减一并将所有其它单元向前移动一位。所有的数字键名将改为从零开始计数,文字键名将不变。
参数:待处理的数组。
返回值:成功时返回移出的值,如果 array
为 空或不是一个数组则返回 NULL
。
例子如下:
mixed array_pop ( array &$array
)
作用:array_pop() 弹出并返回 array
数组的最后一个单元,并将数组 array
的长度减一。如果 array
为空(或者不是数组)将返回 NULL
。 此外如果被调用不是一个数则会产生一个 Warning。
参数:待处理数组。
返回值:成功时返回 array
的最后一个值。如果 array
是空(如果不是一个数组),将会返回 NULL
。
例子如下: