php - 每次从数组中依次返回 5 个项目
问题描述
我想从数组中返回前 5 个项目。
一旦返回前 5 个项目,那么如果我重新执行我的函数,那么它可以从同一个数组中返回第二个 5 个项目,依此类推。
我怎样才能做到这一点?
$myArray = [28,32,33,34,37,49,50,52,57,61,62,63,65,66,67,68,70,71,73,74,75,80,81,89];
我需要如下输出
Outputs:-
first time $ans = [28,32,33,34,37];
second time $ans = [49,50,52,57,61];
third time $ans = [62,63,65,66,67];
fourth time $ans = [68,70,71,73,74];
fifth time $ans = [75,80,81,89];
解决方案
我认为上课会有益于这种情况:
<?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”文件。
推荐阅读
- apache-kafka - Kafka 自定义 AuthenticateCallbackHandler
- javascript - 在滚动时将导航粘贴到网页顶部不起作用
- qt5 - Overo Yocto Qt5 部署
- ios - 如何从自定义视图单元重新加载数据?
- python - 如何在 tensorflow MLP Mnist 示例中预测我的测试图像
- github - Emmet 与 Atom 自动完成冲突
- c# - 我正在尝试建立一个国际象棋游戏并且瓷砖出现在错误的位置
- python-2.7 - python由用户写入输入而没有脏字符
- textmate - 具有多个值的范围属性
- c++ - 具有使用 operator<< 并打印错误值 c++ 的类的程序