Return 每次从数组中按顺序排列 5 个项目

Return 5 items each time sequentially from array

我想 return 数组中的前 5 项。

一旦前 5 项被 returned,然后如果我重新执行我的函数,那么它可以 return 来自同一数组的第二个 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];

我认为 class 对这种情况有益:

<?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' 的文件中读取的,这使脚本更加动态,因为如果需要,您可以将不同的数据集传递给脚本.

数据(存储在名为 '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));

脚本的流程如下:

  1. 脚本检查名为 'class.ser' 的文件,如果存在则反序列化文件中包含的对象
  2. 如果对象被反序列化,那么只需执行 next() 方法
  3. 如果对象未被反序列化(因为文件不存在),则通过传入 'data' 文件中的数据实例化一个新对象并执行 next() 方法
  4. 最后,具有现在已更新属性的对象被序列化并存储回本地存储,为下一次执行做好准备

如果您想从数据集的开头重新运行脚本,那么您需要删除创建的'class.ser'文件。