2

Zend フレームワークの命名規則によると、プライベート変数は _ (アンダースコア) で開始する必要があります。ただし、オブジェクトを配列に変換 (キャスト) するときに問題が発生します。配列要素のキーは「_」で始まります。オブジェクトを配列に変換するときにアンダースコアを削除するにはどうすればよいですか?

例えば

class Book {
     private _name;
     private _price;
}

に変換されます

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

配列要素キーの「_」を削除したい。

4

2 に答える 2

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
)
于 2012-06-07T06:15:40.787 に答える
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()これにより、モデル、ビュー、またはコントローラーを呼び出すことができます。

于 2012-06-07T11:09:40.170 に答える