PHP将对象转换为数组

时间:2012-06-07 09:10:36

标签: php arrays zend-framework

当一个具有私有变量的对象已经转换(强制转换)为php中的数组时,数组元素键将以

开始
  

* _

。如何删除数组键开头的“* _”?

例如

class Book {
    private $_name;
    private $_price;
}

投射后的数组

array('*_name' => 'abc', '*_price' => '100')

我想要

array('name' => 'abc', 'price' => '100')

4 个答案:

答案 0 :(得分:8)

我是这样做的

class Book {
    private $_name;
    private $_price;

    public function toArray() {
        $vars = get_object_vars ( $this );
        $array = array ();
        foreach ( $vars as $key => $value ) {
            $array [ltrim ( $key, '_' )] = $value;
        }
        return $array;
    }
}

当我想将书籍对象转换为数组时,我调用了toArray()函数

$book->toArray();

答案 1 :(得分:3)

您可能遇到问题,因为您正在访问超出其允许范围的私有变量。

尝试更改为:

class Book {
    public $_name;
    public $_price;
}

或者,黑客:

foreach($array as $key => $val)
{
   $new_array[str_replace('*_','',$key)] = $val;
}

答案 2 :(得分:3)

要正确执行此操作,您需要在班级中实施toArray()方法。这样,您可以保护您的属性,并且仍然可以访问属性数组 有很多方法可以实现这一点,如果将对象数据作为数组传递给构造函数,这里有一种方法很有用。

//pass an array to constructor
public function __construct(array $options = NULL) {
        //if we pass an array to the constructor
        if (is_array($options)) {
            //call setOptions() and pass the array
            $this->setOptions($options);
        }
    }

    public function setOptions(array $options) {
        //an array of getters and setters
        $methods = get_class_methods($this);
        //loop through the options array and call setters
        foreach ($options as $key => $value) {
            //here we build an array of values as we set properties.
            $this->_data[$key] = $value;
            $method = 'set' . ucfirst($key);
            if (in_array($method, $methods)) {
                $this->$method($value);
            }
        }
        return $this;
    }

//just return the array we built in setOptions
public function toArray() {

        return $this->_data;
    }

您还可以使用getter和代码构建一个数组,以使数组看起来如您所愿。你也可以使用__set()和__get()来完成这项工作。

当所有的事情都说完了,目标就是拥有像以下一样的东西:

//instantiate an object
$book = new Book(array($values);
//turn object into an array
$array = $book->toArray();

答案 3 :(得分:1)

以下是将对象转换为数组

的步骤

1)。将对象转换为数组

2)。将数组转换为json String。

3)。替换字符串以删除“* _”

e.g
    $strArr= str_replace('\u0000*\u0000_','',json_encode($arr));
    $arr = json_decode($strArr);