ArrayObject的使用

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()//删除数据
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值