维护代码的时候,发现了一段比较有意思的代码:

$history_number = 3;
$m_history = get_cookie('mcity');
if (!empty($m_history))
{
    $history = explode(',', $m_history);
    array_unshift($history, $mcityid);
    $history = array_unique($history);
    while (count($history) > $history_number)
    {
        array_pop($history);
    }
    set_cookie('mcity', implode(',', $history), $DT_TIME + 7*86400);
}

主要功能是 cookie 存储前端地址信息。通过 array_unshift() 方法往队列头部添加元素。为维护队列长度 3,需要在队列长度超过 3 时,再通过 array_pop() 从队列末尾去除一个元素。

在 php 中并没有复杂的堆栈、链表之类的数据结构,只有数组。默认数组属于有序集合,这一点从数组的几个操作函数可以看出来。

array_push()array_pop() 是从数组末尾添加和移除一个元素。

array_unshift()array_shift() 是从数组头部添加和移除一个元素。

队列是“先进后出”,栈是“先进先出”。这个例子属于“先进后出”,所以算是队列的一种实现。