将对象转换为数组

Posted

技术标签:

【中文标题】将对象转换为数组【英文标题】:Convert an Object to an Array 【发布时间】:2011-11-18 20:20:22 【问题描述】:

我正在使用WordPress,由于我不相信可以对对象详细信息进行排序,所以我想知道如何将我的Object 转换为Array,以便可以进行排序。

任何帮助或指导将不胜感激。

我正在使用WP功能get_categories();

$category的完整内容为:

$category->term_id
$category->name
$category->slug
$category->term_group
$category->term_taxonomy_id
$category->taxonomy
$category->description
$category->parent
$category->count
$category->cat_ID
$category->category_count
$category->category_description
$category->cat_name
$category->category_nicename
$category->category_parent

【问题讨论】:

你有什么对象? 不,我的意思是你的对象的结构是什么?它有什么数据? 【参考方案1】:

添加到@galen

<?php 
    $categories = get_categories(); 
    $array = (array)$categories;  
?>

【讨论】:

请注意,此方法不适用于 get_categories();我在@Andy 发布的链接中使用了递归对象到数组的转换函数【参考方案2】:

要将对象转换为数组,您可以使用get_object_vars() (PHP manual):

$categoryVars = get_object_vars($category)

【讨论】:

虽然这回答了 OP,但如果在基本级别有一个数组,然后是其中的对象或进一步递归,它将失败。【参考方案3】:
$array = json_decode(json_encode($object), true);

【讨论】:

您好,您是否介意为其他程序员提供更多答案。【参考方案4】:

一种不太笨重的方法可能是:

function objectToArray($object) 
 
    if(!is_object( $object ) && !is_array( $object ))
     
        return $object; 
     
    if(is_object($object) ) 
     
        $object = get_object_vars( $object ); 
     
    return array_map('objectToArray', $object ); 

(来自http://www.sitepoint.com/forums/showthread.php?438748-convert-object-to-array) 请注意,如果您希望将此作为类中的方法,请将最后一行更改为:

return array_map(array($this, __FUNCTION__), $object ); 

【讨论】:

【参考方案5】:

要将整个对象及其所有属性转换为数组,您可以使用我已经使用了一段时间的这个笨重的函数:

function object_to_array($object)

    if (is_array($object) OR is_object($object))
    
        $result = array(); 
        foreach($object as $key => $value)
         
            $result[$key] = object_to_array($value); 
        
        return $result;
    
    return $object;

演示:http://codepad.org/Tr8rktjN

但对于您的示例,使用该数据,您应该能够像其他人已经说过的那样强制转换为数组。

$array = (array) $object;

【讨论】:

It should work fine,先尝试将get_categories()分配给一个变量。【参考方案6】:

如果对象不是太复杂(就嵌套而言),您可以将类转换为数组:

$example = new StdClass();
$example->foo = 'bar';

var_dump((array) $example);

输出:

array(1)  ["foo"]=> string(3) "bar"  

但是,这只会转换基本级别。如果您有嵌套对象,例如

$example = new StdClass();
$example->foo = 'bar';
$example->bar = new StdClass();
$example->bar->blah = 'some value';

var_dump((array) $example);

然后只有基础对象将被转换为数组。

array(2)  
  ["foo"]=> string(3) "bar" 
  ["bar"]=> object(stdClass)#2 (1)  
    ["blah"]=> string(10) "some value" 
  
 

为了更深入,您必须使用递归。有一个很好的对象到数组转换的例子here。

【讨论】:

谢谢!这正是我一直在寻找的。非常感谢安迪。 我在发布我的功能时错过了您的链接,并不是要踩脚趾。 +1【参考方案7】:

简单到

$array = (array)$object;

http://www.php.net/manual/en/language.types.array.php#language.types.array.casting

【讨论】:

我试过 $array = (array)get_categories();但这不起作用。

以上是关于将对象转换为数组的主要内容,如果未能解决你的问题,请参考以下文章

将平面对象数组转换为嵌套对象数组[重复]

laravel怎么把对象转换为数组

将对象对象数组转换为表格形式的新对象数组

将对象数组转换为对象对象

将对象数组转换为另一个对象数组

怎么把对象数组转换为集合