我该如何将这样的数组转换为对象?
[128] => Array
(
[status] => "Figure A.
Facebook's horizontal scrollbars showing up on a 1024x768 screen resolution."
)
[129] => Array
(
[status] => "The other day at work, I had some spare time"
)
$object = (object) $array;
另一个选项是将标准类实例化为变量,并在遍历数组时重新分配值:
$object = new stdClass();
foreach ($array as $key => $value)
{
$object->$key = $value;
}
正如Edson Medina所指出的,一个真正简洁的解决方案是使用内置的json_
函数:
$object = json_decode(json_encode($array), FALSE);
这也会(递归地)将所有子数组转换为对象,这可能是您想要的,也可能不是。不幸的是,它与循环方法相比有2-3倍的性能损失。
警告!(感谢Ultra的评论):
在不同环境下进行json_decode时以不同方式转换UTF-8数据。我最终在本地得到一个值为“240.00”,而在生产环境中得到“240”-非常糟糕。此外,如果转换失败,字符串将返回为空。
x
保存了对另一个数组的引用。那么,在执行一行代码后,$object->x
将是$array['x']
的副本,不再是对原始数组的引用。这在某些应用程序中可能是无害的,但对于大型数组来说,这会浪费内存,并且如果稍后使用引用,则可能会混乱执行。 - The Coprolal您可以使用类型转换将数组转换为对象。
// *convert array to object* Array([id]=> 321313[username]=>shahbaz)
$object = (object) $array_name;
//now it is converted to object and you can access it.
echo $object->username;
简单的方法是
$object = (object)$array;
但这不是你想要的。如果你想要对象,你需要实现某些功能,但这个问题缺失了这些信息。仅仅为了使用而使用对象是没有意义的。
快速解决办法:
// assuming $var is a multidimensional array
$obj = json_decode (json_encode ($var), FALSE);
不太美观,但有效。
$this
作为访问器,因此强烈暗示他/她希望输出一个stdClass
实例而不是像你的答案所使用的用户定义类。我同意这种解决方案的优雅性,但不幸的是,在解决这个问题时使用嵌套数组的模式是相当常见的。另外,OP可能正在使用需要对象作为输入而不是数组的接口。 - DeaconDesperado以下是三种方法:
Fake a real object:
class convert
{
public $varible;
public function __construct($array)
{
$this = $array;
}
public static function toObject($array)
{
$array = new convert($array);
return $array;
}
}
Convert the array into an object by casting it to an object:
$array = array(
// ...
);
$object = (object) $array;
Manually convert the array into an object:
$object = object;
foreach ($arr as $key => $value) {
$object->{$key} = $value;
}
$object = json_decode(json_encode((object) $yourArray), FALSE);
false
作为参数传递给 json_decode()
函数会返回一个关联数组。 - Rustytrue
传递给json_decode
会返回一个关联数组,false
是默认值并会返回一个StdClass
实例。 - Elliot Reed我也遇到了这个问题,但我注意到json_decode将JSON数组转换为对象。
所以,我通过使用json_encode($ PHPArray)获得解决方案,它返回一个对象的JSON字符串,然后我使用Json_decode($ string)解码字符串,它将返回一个完美结构化的对象。 简写
$object = json_decode(json_encode($array));
或者
$jsonString = json_encode($array);
$object = json_decode($jsonString);
$arr= [128=> ['status'=>
'Figure A. Facebook \'s horizontal scrollbars showing up on a 1024x768 screen resolution.'],
129=>['status'=>'The other day at work, I had some spare time']];
$ArrToObject=(object)$arr;
var_dump($ArrToObject);
结果将是一个包含数组的对象:
object(stdClass)#1048 (2) { [128]=> array(1) {
["status"]=> string(87) "图A。Facebook在1024x768屏幕分辨率上显示水平滚动条。" }
[129]=> array(1) { ["status"]=> string(44) "前几天在工作中,我有一些空闲时间。" } }
根据您需要的位置和访问对象的方式,有不同的方法可以实现。
例如:只需进行类型转换即可。
$object = (object) $yourArray;
然而,最兼容的方法是使用一个实用程序方法(尚未成为 PHP 的一部分),该方法基于指定类型的字符串(或者忽略它只是取消引用值)来实现标准的 PHP 强制类型转换:
/**
* dereference a value and optionally setting its type
*
* @param mixed $mixed
* @param null $type (optional)
*
* @return mixed $mixed set as $type
*/
function rettype($mixed, $type = NULL) {
$type === NULL || settype($mixed, $type);
return $mixed;
}
您的情况中的用法示例(在线演示):
$yourArray = Array('status' => 'Figure A. ...');
echo rettype($yourArray, 'object')->status; // prints "Figure A. ..."
这个对我有用
function array_to_obj($array, &$obj)
{
foreach ($array as $key => $value)
{
if (is_array($value))
{
$obj->$key = new stdClass();
array_to_obj($value, $obj->$key);
}
else
{
$obj->$key = $value;
}
}
return $obj;
}
function arrayToObject($array)
{
$object= new stdClass();
return array_to_obj($array,$object);
}
用法:
$myobject = arrayToObject($array);
print_r($myobject);
返回值:
[127] => stdClass Object
(
[status] => Have you ever created a really great looking website design
)
[128] => stdClass Object
(
[status] => Figure A.
Facebook's horizontal scrollbars showing up on a 1024x768 screen resolution.
)
[129] => stdClass Object
(
[status] => The other day at work, I had some spare time
)
就像往常一样,您可以像这样循环它:
foreach($myobject as $obj)
{
echo $obj->status;
}
$obj = (object) $array;
对于多维数组不起作用。 - Jeff Puckett
$a = (object)['hello' => 'world'];
。 - user1267177