代碼以下:php
<?php class QueueLink { private $first_key=0;//最前面的那個元素的鍵 private $first_value=0;//最前面的那個元素的值 private $last_key=0;//最後面的那個元素的鍵 private $last_value=0;//最後面的那個元素的值 private $index=0;//指定的指針 private $length=0;//隊列長度 private $key_array=0;//隊列鍵數組 private $value_array=0;//隊列值數組 /** * QueueLink constructor. [構造方法] * @param array $list [要存儲的數組列表] */ public function __construct($list=array()) { $length=count($list); if($length<1) { return false;//數量不夠 } $this->length=$length;//存儲隊列長度 $this->key_array=array_keys($list);//存儲鍵 $this->value_array=array_values($list);//存儲值 $this->reset_first_last_key(); $this->reset_first_last_value(); } /** * 彈出第一個元素 * @return array [返回第一個元素的數組] */ public function out_left_first() { //彈出最左邊一個 $first_key = array_shift($this->key_array);//彈出第一個key $first_value = array_shift($this->value_array);//彈出第一個值 $this->list_length_desc(1);//隊列數量減小1個長度 $this->reset_key_value_list();//重置鍵值 return compact("first_key","first_value");//返回第一個元素的key和值 } /** * 彈出最後一個元素 * @return array [返回最後一個元素的數組] */ public function out_right_last() { //彈出最後邊一個 $last_key = array_pop($this->key_array);//彈出第一個key $last_value = array_pop($this->value_array);//彈出第一個值 $this->list_length_desc(1);//隊列數量減小1個長度 $this->reset_key_value_list();//重置鍵值 return compact("last_key","last_value");//返回最後一個元素的key和值 } /** * 返回第一個鍵 * @return int [返回第一個鍵] */ public function get_first_key() { return $this->first_key;//獲取首個key } /** * 返回第一個值 * @return int [返回第一個值] */ public function get_first_value() { return $this->first_value;//獲取首個值 } /** * 返回最後一個鍵 * @return int [返回最後一個鍵] */ public function get_last_key() { return $this->last_key;//獲取最後一個key } /** * 返回最後一個值 * @return int [返回最後一個值] */ public function get_last_value() { return $this->last_value;//獲取最後一個值 } /** * 重置鍵值列表 */ public function reset_key_value_list() { $this->reset_key_array();//重置鍵數組 $this->reset_value_array();//重置值數組 $this->reset_first_last_key();//重置第一個和最後一個鍵 $this->reset_first_last_value();//重置第一個和最後一個值 } /** * 重置第一個和最後一個key */ public function reset_first_last_key() { $this->first_value=isset($this->value_array[0])?$this->value_array[0]:null;//獲取第一個 $this->last_value =isset($this->value_array[$this->length-1])?$this->value_array[$this->length-1]:null;//獲取最後一個 } /** * 重置第一個和最後一個值 */ public function reset_first_last_value() { $this->first_key=isset($this->key_array[0])?$this->key_array[0]:null;//獲取第一個 $this->last_key =isset($this->key_array[$this->length-1])?$this->key_array[$this->length-1]:null;//獲取最後一個 } /** * 重置鍵數組 */ public function reset_key_array() { $this->key_array=array_values($this->key_array);//key重置 } /** * 重置值數組 */ public function reset_value_array() { $this->value_array=array_values($this->value_array);//value重置 } /** * 將隊列的數據長度進行自增 * @param int $num [對自減作自增] */ public function list_length_add($num=1) { $this->length+=$num; } /** * 將隊列的數據長度進行自減 * @param int $num [對自減作處理] */ public function list_length_desc($num=1) { $this->length-=$num; } /** * 從數組中根據key返回數據 * @param string $key [要獲取的key] * @param bool $is_delete [是否要從隊列中刪除] * @return array|bool [返回找到的數組] */ public function get_data_by_key($key='',$is_delete=true) { //根據key獲得數據 而且從數據隊列中刪除 $find_position=array_search($key,$this->key_array); if($find_position===false) { //說明不在數組中 當即返回 return false;//沒有找到 } //若是在key列表中 $value=$this->value_array[$find_position]; if($is_delete) { //要刪除這個元素 $this->remove_from_list_by_find_position($find_position);//從數組隊列中移除這個key } return compact("key","value"); } /** * 根據找到的位置移除該元素 * @param int $find_position [查找到的位置] */ private function remove_from_list_by_find_position($find_position=0) { //移除元素 if($find_position==0) { //說明是第一個 $this->out_left_first();//第一個出隊列 } elseif($find_position==$this->length-1) { //說明是最後一個 $this->out_right_last();//最後一個出隊列 }else { //說明既不是開始 又不是結尾 從中間找到的 unset($this->key_array[$find_position]);//鍵數組去掉要找的元素 unset($this->value_array[$find_position]);//值數組去掉要找的元素 $this->list_length_desc(1);//隊列數量減小1個長度 $this->reset_key_value_list();//重置鍵值 } } } $list=array( "id"=>"first", "name"=>"second", "pid"=>"third", "content"=>"fourth", "title"=>"fifth", ); $obj = new QueueLink($list);//實例化隊列 //var_dump($obj); $first = $obj->out_left_first();//左邊第一個 $last = $obj->out_right_last();//右邊最後一個 //按照鍵取出某個數據 $key="pid"; $value=$obj->get_data_by_key($key,true); var_dump($first); var_dump($last); var_dump($value); var_dump($obj); ?>
效果如圖:數組