ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
什么是线性结构,什么是非线性结构? 线性结构是一个有序数据元素的集合。**常用的线性结构有:线性表,栈,队列,双队列,数组,串。** 非线性结构,其逻辑特征是一个结点元素可能有多个直接前趋和多个直接后继。**常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等)。** 区别: 循环(loop) - 最基础的概念, 所有重复的行为 递归(recursion) - 在函数内调用自身, 将复杂情况逐步转化成基本情况 (数学)迭代(iterate) - 在多次循环中逐步接近结果 (编程)迭代(iterate) - 按顺序访问线性结构中的每一项 遍历(traversal) - 按规则访问非线性结构中的每一项 ———————————————— `ArrayIterator`类实际上是对`ArrayObject`类的补充,为后者提供遍历功能 这个迭代器允许在遍历数组和对象时删除和更新值与键 ``` ArrayIterator implements ArrayAccess , SeekableIterator , Countable , Serializable { /* 常量 */ const integer STD_PROP_LIST = 1 ; const integer ARRAY_AS_PROPS = 2 ; /* 方法 */ public append ( mixed $value ) : void public asort ( void ) : void public __construct ([ mixed $array = array() [, int $flags = 0 ]] ) [CachingIterator](CachingIterator.md) public getArrayC[Iterator(迭代器)接口](Iterator%EF%BC%88%E8%BF%AD%E4%BB%A3%E5%99%A8%EF%BC%89%E6%8E%A5%E5%8F%A3.md)opy ( void ) : array public getFlags ( void ) : int public ksort ( void ) : void public natcasesort ( void ) : void public natsort ( void ) : void public setFlags ( string $flags ) : void public uasort ( callable $cmp_function ) : void public uksort ( callable $cmp_function ) : void //Countable public count ( void ) : int //SeekableIterator public current ( void ) : mixed public rewind ( void ) : void public key ( void ) : mixed public seek ( int $position ) : void public next ( void ) : void public valid ( void ) : bool //ArrayAccess public offsetExists ( mixed $index ) : bool public offsetGet ( mixed $index ) : mixed public offsetSet ( mixed $index , mixed $newval ) : void public offsetUnset ( mixed $index ) : void //Serializable public serialize ( void ) : string public unserialize ( string $serialized ) : void } ``` ``` $fruits = array( "a" => "1", "b" => "2", "c" => "3", "d" => "4" ); $obj = new ArrayObject( $fruits ); print_r($obj);//ArrayObject Object ( [storage:ArrayObject:private] => Array ( [a] => 1 [b] => 2 [c] => 3 [d] => 4 ) ) $it = $obj->getIterator(); print_r($it);//ArrayIterator Object ( [storage:ArrayIterator:private] => ArrayObject Object ( [storage:ArrayObject:private] => Array ( [a] => 1 [b] => 2 [c] => 3 [d] => 4 ) ) ) echo "我们要迭代多少项: " . $obj->count();//我们要迭代多少项: 4 //迭代ArrayObject中的值: while( $it->valid() ) { echo $it->key() . "<=>" . $it->current() . "\n";//a<=>1 b<=>2 c<=>3 d<=>4 $it->next(); } // 这里的好处是可以使用foreach循环进行迭代 foreach ($it as $key=>$val){ echo $key.":".$val."\n";//a:1 b:2 c:3 d:4 } ```