class CustomIterator implements Iterator
{
private $_data;
private $_index = 0;
public function __construct($data)
{
$this->_data = $data;
}
/**
* 返回当前指针指向的元素
* @return mixed
*/
public function current()
{
return $this->_data[$this->_index];
}
/**
* 指针向前推一位
*/
public function next()
{
$this->_index ++;
}
/**
* 重置指针,将指针指向第一个元素
*/
public function rewind()
{
$this->_index = 0;
}
/**
* 返回当前指针位置
* @return int|mixed
*/
public function key()
{
return $this->_index;
}
/**
* 检测指针当前指向是否有效
* @return bool
*/
public function valid()
{
return count($this->_data) > $this->_index;
}
}
$data = array(
['name' => 'zhangsan', 'age' => 12, 'career' => 'engineer'],
['name' => 'lisi', 'age' => 12, 'career' => 'engineer'],
['name' => 'waner', 'age' => 12, 'career' => 'engineer'],
['name' => 'faguan', 'age' => 12, 'career' => 'engineer'],
);
$obj = new CustomIterator($data);
echo '<pre>';
foreach ($obj as $key => $user) {
print_r($user);
}
echo '---------------------------------------------------<br>';
// 重置指针,相当于数组里的reset()方法
$obj->rewind();
while ($obj->valid())
{
print_r($obj->current());
$obj->next();
}
结果:
Array
(
[name] => zhangsan
[age] => 12
[career] => engineer
)
Array
(
[name] => lisi
[age] => 12
[career] => engineer
)
Array
(
[name] => waner
[age] => 12
[career] => engineer
)
Array
(
[name] => faguan
[age] => 12
[career] => engineer
)
---------------------------------------------------
Array
(
[name] => zhangsan
[age] => 12
[career] => engineer
)
Array
(
[name] => lisi
[age] => 12
[career] => engineer
)
Array
(
[name] => waner
[age] => 12
[career] => engineer
)
Array
(
[name] => faguan
[age] => 12
[career] => engineer
)