将对象转换为数组时删除_(下划线)

时间:2012-06-07 06:03:57

标签: php arrays zend-framework naming-conventions

根据Zend框架命名约定,私有变量应以_(下划线)开头。但是在将对象转换为数组(强制转换)时会导致问题。数组元素键以“_”开头。如何在将对象转换为数组时删除下划线?

例如

class Book {
     private _name;
     private _price;
}

将转换为

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

我想删除数组元素键中的'_'。

2 个答案:

答案 0 :(得分:3)

如果没有一个确切的例子,有点困难,但这应该是接近的。基本上循环遍历,查找以_开头的元素,删除它们并将无下划线的元素插入到数组

$arr = array(
  'foo1' => 'bar1',
  '_foo2' => 'bar2',
  '_foo3' => 'bar3'
);

foreach ($arr as $key => $val) {
     if (substr($key,0,1) == '_') {
         unset($arr[$key]);
         $arr[substr($key,1)] = $val;
     }
}

在此之后,$arr看起来像

Array
(
    [foo1] => bar1
    [foo2] => bar2
    [foo3] => bar3
)

答案 1 :(得分:2)

我想也许你想要这样的东西:

//because of variable scope this method must be in the class where the private propeties are.
public function toArray() {
        $vars = get_object_vars($this);
        $array = array();
        foreach ($vars as $key => $value) {
            $array[ltrim($key, '_')] = $value;
        }
        return $array;
    }

这样您就可以在模型,视图或控制器中调用->toArray()