2

私の配列のvar_dumpは次のように表示されます。配列内のmy_optionsの数を取得したいと思います。インデックス2にはオプションがないことに注意してください。どうやってやるの?

var_dump($myVar);


array
  0 => 
    object(app\models\Product)[209]
      protected '_Nested' => 
        array
          empty
      protected '_Sibling' => 
        array
          empty
      protected '_class' => string 'app\models\Customer' (length=18)
      protected '_data' => 
        array
          '_id' => int 345543
          'customer_name' => string 'John Dee' (length=14)
          'Sibling' => 
            array
              ...
          'my_options' => 
            array
              ...
          'Nesting' => 
            array
              ...
          'image' => string 'img.jpg' (length=35)
          'inventory' => 
            array
              ...
          'name' => string 'papa john' (length=35)
          'price' => float 26
          'status' => int 1
1 => 
    object(app\models\Product)[209]
      protected '_Nested' => 
        array
          empty
      protected '_Sibling' => 
        array
          empty
      protected '_class' => string 'app\models\Customer' (length=18)
      protected '_data' => 
        array
          '_id' => int 89237
          'customer_name' => string 'Linda Arap' (length=14)
          'Sibling' => 
            array
              ...
          'my_options' => 
            array
              ...
          'Nesting' => 
            array
              ...
          'image' => string 'img2.jpg' (length=35)
          'inventory' => 
            array
              ...
          'name' => string 'Pizza Hut' (length=35)
          'price' => float 26
          'status' => int 1
2 => 
    object(app\models\Product)[209]
      protected '_Nested' => 
        array
          empty
      protected '_Sibling' => 
        array
          empty
      protected '_class' => string 'app\models\Customer' (length=18)
      protected '_data' => 
        array
          '_id' => int 89237
          'customer_name' => string 'Linda Arap' (length=14)
          'Sibling' => 
            array
              ...
4

2 に答える 2

3

_dataは保護された変数であるため、オブジェクトの外部からアクセスすることはできません。getData()にアクセスするメソッドを使用(または作成)する必要があります$this->_data。そのメソッドを呼び出すだけで、options配列にアクセスできます。

_dataにアクセスし、my_optionsをオールインワンで返すメソッドの例:

public function getMyOptions() {
  return $this->_data['my_options'];
}

これは、次のようなもので呼び出すことができます。

$product instanceof app\models\Product;
$myOptions = $product->getMyOptions();

また、モデル(おそらくorm)クラスを使用しているようです。データ配列にアクセスするためのメソッドが組み込まれていると思います。アクセスmy_optionsする一般的な方法は次のとおりです。

$options = $product->my_options; // via magic methods
$options = $product->get('my_options');
$options = $product->getField('my_options');
于 2012-08-03T01:19:52.893 に答える
0

もし私があなたなら、プロパティの可視性のような少しの構文糖衣が私と私のデータの間に入るのを許しません。

オブジェクトのプライベートまたは保護されたプロパティにアクセスするにはどうすればよいですか?

ReflectionPropertyを使用する理由はもちろん=)

これでうまくいくはずです:

$my_options_count = array_map(function ($object) {
    $reflect = new ReflectionObject($object);
    foreach ($reflect->getProperties() as $prop)
         if ($prop->name == '_data') {
             $prop->setAccessible(true);
             $data = $prop->getValue($object);
            if (array_key_exists('my_options', $data))
                if (is_array($my_options = $data['my_options']))
                    return count($my_options);
         }
   return 0;
}, $myVar);

$ my_options_countは、my_optionsまたは各レコードのオプション数のないレコードに対して0を表示するようになりました。あなたがすべてのレコードから私のオプションを合計した後なら、 array_sumはあなたの友達です=)

$my_options_total = array_sum($my_options_count);

決して言わないで、常に挑戦し続けてください。Njoy!

于 2012-08-05T00:37:10.663 に答える