PHP数组转对象数组之后,怎么用对象数组的方式访问数据

用数组语法访问对象属性 - 常用知识 - PHP进阶 - KK之家
常用知识 - 用数组语法访问对象属性
发表日期:
访问一个对象的属性,语法是$obj-&属性名称,但其实可以使用$obj['属性名称']来访问属性
对象要实现ArrayAccess接口,其中要实现的方法有
public boolean offsetExists ( mixed $offset ) 实现isset($obj['key'])的判断
public mixed offsetGet ( mixed $offset ) 实现$value = $obj['key']取值
public void offsetSet ( mixed $offset , mixed $value ) 实现$obj['key'] = 'value' 实现向指定的key赋值
public void offsetUnset ( mixed $offset ) 实现unset($obj['key']) 实现把指定的key销毁
示例代码:
以下代码不是正常的逻辑,只是为了展示如何实现数组方式的属性操作而已
class User implements ArrayAccess{
public $name = '';
public $age = 0;
public function offsetExists($key){
return (bool)$this-&{$key};
public function offsetGet($key){
return $this-&{$key};
public function offsetSet($key, $value){
$this-&{$key} = $value;
public function offsetUnset($key){
$this-&{$key} = '';
$user = new User();
echo '&h1&name的测试&/h1&';
echo 'name键为空:' . $user['name'] . '&br/&';
echo 'name属性为空:' . $user-&name . '&br/&';
$user['name'] = 'jay';
echo 'name键的值:' . $user['name'] . '&br/&';
echo 'name属性的值:' . $user-&name . '&br/&&br/&';
echo isset($user['name']) ? 'name键存在&br/&' : 'name键不存在&br/&';
echo $user-&name ? 'name属性有值&br/&' : 'name属性没值&br/&';
$user['name'] = '';
echo isset($user['name']) ? 'name键存在&br/&' : 'name键不存在&br/&';
echo $user-&name ? 'name属性有值&br/&' : 'name属性没值&br/&';
echo '&br/&&br/&&h1&age的测试&/h1&';
echo 'age键为空:' . $user['age'] . '&br/&';
echo 'age属性为空:' . $user-&age . '&br/&';
$user['age'] = 99;
echo 'age键的值:' . $user['age'] . '&br/&';
echo 'age属性的值:' . $user-&age . '&br/&&br/&';
echo isset($user['age']) ? 'age键存在&br/&' : 'age键不存在&br/&';
echo $user-&age ? 'age属性有值&br/&' : 'age属性没值&br/&';
$user['age'] = '';
echo isset($user['age']) ? 'age键存在&br/&' : 'age键不存在&br/&';
echo $user-&age ? 'age属性有值&br/&' : 'age属性没值&br/&';
通常如果要实现用数组语法访问对象属性,那么赋值和取值时一般不是向对象的属性取值,而是向一个私有的数据容器(下例中的$_data)取值赋值:
class User implements ArrayAccess{
private $_data = [];
public function offsetExists($key){
return isset($this-&_data[$key]);
public function offsetGet($key){
return $this-&_data[$key];
public function offsetSet($key, $value){
$this-&_data[$key] = $value;
public function offsetUnset($offset){
unset($this-&_data[$key]);
public function test(){
echo 'method';
$user = new User();
$user-&test();
$user['xx'] = 1111;
echo $user['xx'];
echo '&br/&&br/&' . $user['yyy'];
一般平时写代码不经常用到这个知识,多数用于框架的封装和一些特殊场合,但你偶尔会遇到这类代码,此时知道它原理就好了,不要误认为那是个数组,其实是个对象
实际中可以看到的就是Yii2这个框架的ORM实现是应用了这个技术的,实现了既可将模型转换成JSON,也能调用模型的业务逻辑,代码类似这样:
$user = User::findOne(['email' =& '']);
if(!$user-&allow('manage_user')){
throw new \Exception('您无法删除用户');
Yii::$app-&response-&format = \yii\web\Reponse::FORMAT_JSON;
Yii::$app-&response-&data = $user;
则前端收到一个JSON类似这样:
{"id":1,"name":"Jay","email":""...}
但要注意,这个对象还不能放在for循环里进行遍历哦!,要用在for循环上就要实现Iterator接口了php怎么把数组或对象整体转码?
[问题点数:20分]
本版专家分:20
CSDN今日推荐
本版专家分:389015
2017年 总版技术专家分年内排行榜第四2014年 总版技术专家分年内排行榜第四2013年 总版技术专家分年内排行榜第四2012年 总版技术专家分年内排行榜第六
2018年3月 总版技术专家分月排行榜第一2013年5月 总版技术专家分月排行榜第一
2018年4月 总版技术专家分月排行榜第二2016年7月 总版技术专家分月排行榜第二2016年3月 总版技术专家分月排行榜第二2015年12月 总版技术专家分月排行榜第二2014年8月 总版技术专家分月排行榜第二2014年7月 总版技术专家分月排行榜第二2013年6月 总版技术专家分月排行榜第二
2016年10月优秀大版主
2016年8月论坛优秀版主优秀大版主2015年7月优秀大版主2015年8月优秀大版主2015年8月优秀大版主2015年9月优秀大版主2015年5月优秀大版主2015年4月优秀版主2014年11月论坛优秀版主
本版专家分:7177
2015年3月 PHP大版内专家分月排行榜第三2015年2月 PHP大版内专家分月排行榜第三
匿名用户不能发表回复!
其他相关推荐php object to array 对象转换数组函数_懒人程序
支付宝赞助帐号:
php object to array 对象转换数组函数
php object to array 对象转换数组函数
function object_to_array($obj){
$_arr = is_object($obj)? get_object_vars($obj) :$
foreach ($_arr as $key =& $val){
$val=(is_array($val)) || is_object($val) ? object_to_array($val) :$
$arr[$key] = $
支持键盘 ← →PHP对象(object) 与 数组(array) 的转换例子
作者:用户
本文讲的是PHP对象(object) 与 数组(array) 的转换例子,
数组是PHP的灵魂,非常强大,但有时候面向对象编程也是挺方便的,数组 与 对象 之间切换也是常有的事:
* 数组 转 对象
* @param array $arr
数组是的灵魂,非常强大,但有时候面向对象编程也是挺方便的,数组 与 对象 之间切换也是常有的事:
* 数组 转 对象
* @param array $arr 数组
* @return object
function array_to_object($arr)
if (gettype($arr) != 'array')
foreach ($arr as $k =& $v)
if (gettype($v) == 'array' || getType($v) == 'object')
$arr[$k] = (object)array_to_object($v);
return (object)$
* 对象 转 数组
* @param object $obj 对象
* @return array
function object_to_array($obj)
$obj = (array)$
foreach ($obj as $k =& $v)
if (gettype($v) == 'resource')
if (gettype($v) == 'object' || gettype($v) == 'array')
$obj[$k] = (array)object_to_array($v);
class Test{
public $a;
public $b;
public function __construct($a) {
$this-&a = $a;
//对象转数组,使用get_object_vars返回对象属性组成的数组
function objectToArray($obj){
$arr = is_object($obj) ? get_object_vars($obj) : $
if(is_array($arr)){
return array_map(__FUNCTION__, $arr);
//数组转对象
function arrayToObject($arr){
if(is_array($arr)){
return (object) array_map(__FUNCTION__, $arr);
$test = new Test('test1');
$test-&b = new Test('test2');
print_r($test);
$array = objectToArray($test);
print_r($array);
$object = arrayToObject($array);
print_r($object);
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php
jq inarray 对象数组、js object对象转数组、java对象转object数组、object对象转数组、jsonobject 数组对象,以便于您获取更多的相关知识。
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
40+云计算产品,6个月免费体验
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
云服务器9.9元/月,大学必备
云栖社区(yq.aliyun.com)为您免费提供相关信息,包括
,所有相关内容均不代表云栖社区的意见!php数组 类和对象 接口使用方法
原创
 16:38:48
302
1. 数组php的数组其实是一个关联数组,或者说是哈希表,php不需要预先声明数组的大小,可以用直接赋值的方式来创建数组,例如://最传统,用数字做键,赋值
$state[0]=&beijing&;
$state[1]=&hebei&;
$state[2]=&tianjin&;
//如果键是递增的数字,则可以省略
$city[]=&shanghai&;
$city[]=&tianjin&;
$city[]=&guangzhou&;
//用字符串做键
$capital[&china&]=&beijing&;
$capital[&japan&]=&tokyo&;用array()来创建数组会更加方便一点,可以将数组元素作为array的参数传递给他,也可以用=&运算符创建关联数组,例如:$p=array(1,3,5,7);
$capital=array(&china&=&&beijing&, &japan=&&tokyo&);array其实是一种语法结构,而不是函数,和array类似,还有一个list(),它可以用来提取数组中的值,并给多个变量赋值,例如:list($s,$t)=$
echo $s,' ',$t;输出结果:shanghai tianjin注意,list方法只能用于由数字索引的数组.php内建了一些常用的数组处理函数,具体可以参考手册,常用的函数举例如下,count或者sizeof可以得到数组的长度,array_merge 可以合并两个,或者多个数组,array_push(pop)可以像堆栈一样使用数组.&?php
$state[0]=&beijing&;
$state[1]=&hebei&;
$state[2]=&tianjin&;
$city[]=&shanghai&;
$city[]=&tianjin&;
$city[]=&guangzhou&;
$capital[&china&]=&beijing&;
$capital[&japan&]=&tokyo&;
echo count($city),'&br/&';
array_push($capital,&paris&);
$newarray=array_merge($city,$capital);
foreach($newarray as $elem)
//开源代码phprm.com
echo $elem.'&br/&'; //输出结果为:
//shanghai
//guangzhou
//paris2. 类和对象php5开始对面向对象编程有了很好的支持,php中的类的概念和其他面向对象的语言比如c#是十分相似的,它也是一个值和方法的聚合体,使用class关键字定义,例如:&?php
class authuser {
protected $
protected $
public function
__construct($username,$password) {
$this-&username=$
$this-&password=$
public function getusername() {
public function changepassword($old,$new) {
if($this-&password==$old) {
$this-&password=$
public function login($password) {
return $this-&password==$
public static function createuser($username,$password) {
$user=new authuser($username,$password);
$user=authuser::createuser(&admin&,&123&);
echo $user-&getusername();
if($user-&changepassword('abc', 'new'))
echo 'changepassword success';
echo 'change password fail';
$user-&changepassword(&123&, &321&);
if($user-&login(&321&))
echo &login&;
echo &login fail&;上面是一个虽然没有什么用但是语法结构上较为完整的类,首先使用class关键字定义类的名字,内部可以定义字段和方法,字段和方法的修饰词可以是private,protected,public 和 final,仅方法有,其含义和其它语言一致,不再赘述,不同的地方在于,php不支持函数的重载,另外,php5的构造函数的定义是__construct,注意前缀是两个下划线。php4的构造函数的定义和其它语言一致,是和类名一样的函数,php5也兼容这种写法。php5还支持析构函数,名字是__destruct,在函数内部,可以使用$this变量来获得当前对象的引用,php也支持静态函数,同样是使用static关键字修饰,示例中最后一个函数就静态函数,静态函数不能通过类的实例引用.类的定义下面是使用类的代码示例,php也是通过new关键字来实例化一个类,通过-&运算符来引用对象的方法,注意其静态类的引用方法是::,这是和c++一致的.下面再简单介绍下类的继承,php中使用extends关键字来实现类的继承,这是和java一致的,实例代码如下:&?php
class baseclass {
function __construct() {
print &in baseclass constructorn&;
class subclass extends baseclass {
function __construct() {
parent::__construct();
print &in subclass constructorn&;
$obj = new baseclass();
$obj = new subclass();//输出的结果是: in baseclass constructor in baseclass constructor in subclass constructor 要注意,php的子类的构造函数不会自动调用父类的构造函数,必须在程序中显式地调用,使用parent关键字可以得到父类的引用,另外,由于php本身是弱类型的,所以&多态&的概念也不存在了,实际上,它永远都是多态的.接口:接口定义了一组方法,但不实现他们,其语法为:interface
iinterfacename
//常量、函数定义
}类利用implements关键字来表面实现某个接口,这和java是一致的.&?php
interface iaddable{
function add($something);
class addclass implements iaddable
function addclass($num){
public function add($something)
$a=new addclass (5);
echo $a-&add(10); 本文地址:转载随意,但请附上文章地址:-)
江湖传言:PHP是世界上最好的编程语言。真的是这样吗?这个梗究竟是从哪来的?学会本课程,你就会明白了。
PHP中文网出品的PHP入门系统教学视频,完全从初学者的角度出发,绝不玩虚的,一切以实用、有用...
点击数(110036)
ThinkPHP是国内最流行的中文PHP开发框架,也是您Web项目的最佳选择。《php.cn独孤九贱(5)-ThinkPHP5视频教程》课程以ThinkPHP5最新版本为例,从最基本的框架常识开始,将...
点击数(107847)
《php.cn原创html5视频教程》课程特色:php中文网原创幽默段子系列课程,以恶搞,段子为主题风格的php视频教程!轻松的教学风格,简短的教学模式,让同学们在不知不觉中,学会了HTML知识。
点击数(82844)
本套教程,以一个真实的学校教学管理系统为案例,手把手教会您如何在一张白纸上,从零开始,一步一步的用ThinkPHP5框架快速开发出一个商业项目。
点击数(82074)
所有计算机语言的学习都要从基础开始,《PHP入门视频教程之一周学会PHP》不仅是PHP的基础部分更主要的是PHP语言的核心技术,是学习PHP必须掌握的内容,任何PHP项目的实现都离不开这部分的内容,通...
点击数(79236)
全栈工程师
文章总浏览数
相关视频章节}

我要回帖

更多关于 对象数组 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信