使用类属性作为键迭代数组

时间:2014-01-07 18:16:48

标签: php

我有两个类 - 一个是User对象,另一个是Drupal View,显示链接(只是另一个对象,用于此问题)。 Drupal View显示的内容具有“field_carries_trucks”,“field_carries_cars”等属性。这些是布尔属性(无论它们是true还是false都由复选框指定),但它在Drupal中的结果是它们成为数组值。

举个例子,如果我想检查一个特定链接的属性的值(是否检查了“携带汽车”的特定内容)我在

上执行var_dump
$view->_field_data[nid][entity]->field_carries_cars[und][0][value]

因此,此示例中的field_carries_cars是一个数组。在上面执行var转储会产生0或1。

对于User类,User类具有类似('sees_cars')的布尔属性。基本上,它是用户是否可以看到某个链接的布尔值。

现在,我的目标是以优雅的方式过滤用户是否可以看到链接。所以这就是我所做的:

$permissions = array(
 'field_carries_trucks' => 'user_sees_trucks',
 'field_carries_cars' => 'user_sees_cars',
 'field_carries_vans' => 'user_sees_vans',
);

然后我的目标是做一个简单的检查

foreach($permissions as $field => $user_perm) {
  if($view->result[]->_field_data[nid][entity]->$field[und][0][value] == $user->$user_perm) {
    echo 'Can view';
  }      
}

基本上,如果链接的字段属性(即汽车链接)和用户的属性(即可以查看汽车链接),则应显示该链接。

这是我的问题。如果我这样做:

foreach($permissions as $field => $user_perm) {  
  var_dump($view->result[]->_field_data[nid][entity]->$field)
}

只是为了排除故障,没有任何事情发生。

我的目标是避免对所有这些权限检查进行硬编码。我究竟做错了什么?或者,我该怎么做才能让这件事变得优雅?

1 个答案:

答案 0 :(得分:1)

您缺少数组索引0

foreach($permissions as $field => $user_perm) {  
  var_dump($view->result[**0**]->_field_data[nid][entity]->$field)
}

好吗?

相关问题