ArrayObject是将数组转换为数组对象。可以通过数组的方式访问对象属性。
ArrayObject 类中预定义常量(ArrayObject Flags):
ArrayObject::STD_PROP_LIST
(默认值)
只能用数组列表形式,不能用尚需经的形式的进行访问或者赋值。
如,可用$arr['key'],不能用$arr->key的形式进行访问;
可用$arr['key'] = ‘value’,不能用 $arr->key = 'value'的形式进行赋值
ArrayObject::ARRAY_AS_PROPS
即可用数组列表形式,也可用属性的形式进行访问或者赋值。
实例1,数组格式(\ArrayObject::STD_PROP_LIST)
$arr = new \ArrayObject(['name' => 'bar', 'age' => 18]);
或者 $arr = new \ArrayObject(['name' => 'bar', 'age' => 18], \ArrayObject::STD_PROP_LIST);
print_r($arr);
\ArrayObject(),第二个参数不写,默认就是 \ArrayObject::STD_PROP_LIST
输出
ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[name] => bar
[age] => 18
)
)
访问:
echo $arr['name'] ,输出 bar
echo $arr->name , 不能输出
赋值:
$arr['sex'] = '女';
print_r($arr)
输出:
barArrayObject Object
(
[weight] => 65kg
[storage:ArrayObject:private] => Array
(
[name] => bar
[age] => 18
[sex] => 女
)
)
在原来的基础上多了一个 sex 元素
但是以属性方式赋值:
$arr->sex = '女';
print_r($arr)
输出:
ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[name] => bar
[age] => 18
)
)
相比原来没有变化,说明这种方式添加不成功
结论:
设置为 \ArrayObject::STD_PROP_LIST 列表格式时,只能用数组形式进行访问和赋值。
实例2,属性格式(\ArrayObject::ARRAY_AS_PROPS)
$arr = new \ArrayObject(['name' => 'bar', 'age' => 18], \ArrayObject::ARRAY_AS_PROPS);
$arr['sex'] = '女';
$arr->weight = '50kg';
print_r($arr);
输出:
bar18ArrayObject Object
(
[storage:ArrayObject:private] => Array
(
[name] => bar
[age] => 18
[sex] => 女
[weight] => 50kg
)
)
结论:
设置为 \ArrayObject::ARRAY_AS_PROPS 属性格式时,即可用
属性
和数组
形式进行访问和赋值。
还可以这样
$arr = new \ArrayObject(['name' => 'bar', 'age' => 18],
\ArrayObject::STD_PROP_LIST|\ArrayObject::ARRAY_AS_PROPS);
两个同时设置
除了上面再第个参数位置上进行设置为,还可以单独设置,如
$arr = new \ArrayObject(['name' => 'bar', 'age' => 18]);
$arr ->setFlags(\ArrayObject::STD_PROP_LIST|\ArrayObject::ARRAY_AS_PROPS);
$arr->prop = 'prop data';
$arr['arr'] = 'array data';
print_r($arr);
代码示例
<?php //打印全部数组元素
$array =array('1'=>'one', '2'=>'two', '3'=>'three');
$arrayobject = new ArrayObject($array);//构造一个ArrayObject对象
for($iterator= $arrayobject->getIterator();//构造一个迭代器
$iterator->valid();//检查是否还含有元素
$iterator->next()){ //指向下个元素
echo $iterator->key() . ' => ' . $iterator->current() . "\n";//打印数组元素
}
?>
<?php //重置数组指针
$arrayobject =new ArrayObject();
$arrayobject[] = 'zero';
$arrayobject[] = 'one';
$arrayobject[] = 'two';
$iterator= $arrayobject->getIterator();
$iterator->next();
echo $iterator->key(); // 1
$iterator->rewind(); //重置指针到头部
echo $iterator->key(); // 0
?>
ArrayObject的常用函数
ArrayIterator::current( void ) //返回当前数组元素
ArrayIterator::key(void) //返回当前数组key
ArrayIterator::next (void)//指向下个数组元素
ArrayIterator::rewind(void )//重置数组指针到头
ArrayIterator::seek()//查找数组中某一位置
ArrayIterator::valid()//检查数组是否还包含其他元素
ArrayObject::append()//添加新元素
ArrayObject::__construct()//构造一个新的数组对象
ArrayObject::count()//返回迭代器中元素个数
ArrayObject::getIterator()//从一个数组对象构造一个新迭代器
ArrayObject::offsetExists(mixed index )//判断提交的值是否存在
ArrayObject::offsetGet()//指定 name 获取值
ArrayObject::offsetSet()//修改指定 name 的值
ArrayObject::offsetUnset()//删除数据