LRU算法的解释详情请见 ​​https://baike.baidu.com/item/LRU/1269842​

这里百度百科给出的比较详细,然后后面有一个例子 说

LRU(least recently used)最近最少使用。

假设 序列为 4 3 4 2 3 1 4 2

物理块有3个 则

首轮 4调入内存 4

次轮 3调入内存 3 4

之后 4调入内存 4 3

之后 2调入内存 2 4 3

之后 3调入内存 3 2 4

之后 1调入内存 1 3 2(因为最少使用的是4,所以丢弃4)

之后 4调入内存 4 1 3(原理同上)

最后 2调入内存 2 4 1

又如:

考虑下述页面走向:

1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6

1 1

2 2 1

3 3 2 1

4 4 3 2 1

2 2 4 3 1

1 1 2 4 3

5 5 1 2 4

6 6 5 1 2

2 2 6 5 1

1 1 2 6 5

2 2 1 6 5

3 3 2 1 6

7 7 3 2 1

6 6 7 3 2

3 3 6 7 2

2 2 3 6 7

1 1 2 3 6

2 2 1 3 6

3 3 2 1 6

6 6 3 2 1

那么想达到这样的效果 用PHP如何实现呢?

我给出核心函数如下

<?php
function lru($into_data="")
{
static $array=array();
$max_length=5;//最大长度
if(empty($array))
{
$array[]=$into_data;
}else
{
//说明不为空 不为空则进行查找
$find_index=array_search($into_data, $array);
if($find_index!==false)
{
//说明找到了 找到的话就放到第一个来
unset($array[$find_index]);//去掉这个 拿到第一个去
array_unshift($array,$into_data);//放到第一个去
}else
{
//没找到 判断是否达到最大长度 如果达到 去掉最后一个
if(count($array)==$max_length-1)
{
//到达最大长度
// 去除最后一个
array_pop($array);
array_unshift($array,$into_data);//放到第一个去
}else
{
array_unshift($array,$into_data);//放到第一个去
}
}
//$array=array_values($array);//数组重置 经superfat提醒这里不用重置 可以注释
}
return $array;
}
?>

调用代码如下:

<?php
$array=array(1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6);
foreach ($array as $key => $v)
{
$now=lru($v);
echo ($v)." ".(implode(" ",$now))."<br/>";
}
?>

效果如下:

静态变量数组实现LRU算法_php

结果如下:

静态变量数组实现LRU算法_php_02

正是我们想要的!