我的数组的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
...
答案 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 sugar像property 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);
永远不要说永远,永远不断尝试。恩乔伊!