我认为上课会有益于这种情况:
<?php
class MyClass {
private $pos = 0;
private $data = [];
function __construct($data) {
$this->data = $data;
}
public function next($length = 5) {
$offset = $this->pos;
$this->pos = $offset + $length;
return array_slice($this->data, $offset, $length);
}
}
示例用法:
$class = new MyClass([28,32,33,34,37,49,50,52,57,61,62,63,65,66,67,68,70,71,73,74,75,80,81,89]);
print_r($class->next());
print_r($class->next());
print_r($class->next());
print_r($class->next(10));
输出:
Array
(
[0] => 28
[1] => 32
[2] => 33
[3] => 34
[4] => 37
)
Array
(
[0] => 49
[1] => 50
[2] => 52
[3] => 57
[4] => 61
)
Array
(
[0] => 62
[1] => 63
[2] => 65
[3] => 66
[4] => 67
)
Array
(
[0] => 68
[1] => 70
[2] => 71
[3] => 73
[4] => 74
[5] => 75
[6] => 80
[7] => 81
[8] => 89
)
更新
下面更新的代码通过序列化对象并将其持久化到本地存储来在脚本执行之间工作。我还更改了脚本检索数据的方式,在下面的示例中,它是从名为“data”的文件中读取的,这使脚本更加动态,因为如果需要,您可以将不同的数据集传递给脚本。
数据(存储在名为“数据”的文件中):
28,32,33,34,37,49,50,52,57,61,62,63,65,66,67,68,70,71,73,74,75,80,81,89
脚本:
class MyClass {
private $pos = 0;
private $data = [];
function __construct($data) {
$this->data = $data;
}
public function next($length = 5) {
$offset = $this->pos;
$this->pos = $offset + $length;
return array_slice($this->data, $offset, $length);
}
}
if(file_exists('class.ser')) {
$class = unserialize(file_get_contents('class.ser'));
} else {
$data = explode(',', file_get_contents('data'));
$class = new MyClass($data);
}
print_r($class->next());
file_put_contents('class.ser', serialize($class));
脚本的流程如下:
- 该脚本检查名为“class.ser”的文件,如果存在,则反序列化文件中包含的对象
- 如果对象被反序列化,则只需执行该
next()
方法
- 如果对象未反序列化(因为文件不存在),则通过传入“数据”文件中的数据实例化一个新对象并执行该
next()
方法
- 最后,具有现在更新的属性的对象被序列化并存储回本地存储,为下一次执行做好准备
如果要从数据集的开头重新运行脚本,则需要删除创建的“class.ser”文件。