数组与对象和更多数组混合

时间:2012-08-03 01:17:18

标签: php php-5.3

我的数组的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
              ...

2 个答案:

答案 0 :(得分:3)

_data是受保护的变量,因此您无法从对象外部访问它。您需要使用(或创建)访问getData()的{​​{1}}方法。只需调用该方法,您就可以访问options数组。

访问_data并返回my_options的示例方法:

$this->_data

可以使用以下内容调用:

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

此外,您似乎正在使用模型(可能是orm)类。我想它有内置的方法来访问数据数组。访问$product instanceof app\models\Product; $myOptions = $product->getMyOptions(); 的常用方法是:

my_options

答案 1 :(得分:0)

如果我是你,我不会让syntactic sugarproperty visibility那样介于我和我的数据之间。

如何访问对象的私有属性或受保护属性?

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的记录或每条记录的选项数,$ my_options_count将显示0。如果您在所有记录中总计我的选项之后,则array_sum是您的朋友=)

$my_options_total = array_sum($my_options_count);

永远不要说永远,永远不断尝试。恩乔伊!