使用来自第二个数组的键迭代对象属性

时间:2014-05-16 18:02:20

标签: php arrays object iterator

我想在对象上调用foreach循环并迭代$this->_values,但仅针对$this->_allowedFields中存在的键。

1)$this->_values 可以包含非$this->_allowedFields的数据,但应该从foreach中排除。

2)$this->_allowedFields 包含不在$this->_values中的密钥,但我仍需要在foreach循环中包含该步骤。

我如何实现这一目标?


我已经设置了我的类来实现Iterator,并且可以在对象的_values数组上成功调用foreach循环,如下所示:

foreach($object as $key => $value) {
    // do stuff
}

在实现Iterator接口时,我自己在下面找到了解决方案。

public function rewind()
{
    reset($this->_allowedFields);
}

public function current()
{
    $key = current($this->_allowedFields);
    return $this->_values[$key];
}

public function key()
{
    $key = current($this->_allowedFields);
    return $key;
}

public function next()
{
    next($this->_allowedFields);
    $key = current($this->_allowedFields);
    return $this->$this->_values[$key];
}

public function valid()
{
    $key = current($this->_allowedFields);
    $var = ($key !== null && $key !== false);
    return $var;
}

2 个答案:

答案 0 :(得分:0)

如果我理解你的正确,那么: 你不能只检查所有值或所有字段吗? 这很简单!

1)方式

foreach($objects as $key => $object){
foreach($object->_allowFields as $allowField){
    if(isset($object->_values[$allowField])){
        echo $object->_values[$allowField];
    }else{
        echo "Sorry, but this field is empty";
    }
}

}

2)方式#2

foreach($objects as $key => $object){
$allowedFields = $object->_allowFields;
foreach($object->_values as $key => $value){
    if(in_array($key, $allowedFields)){
        // Field is allowed
    }else{
        // FIeld not allowed
    }
}}

答案 1 :(得分:0)

如果您具有类属性的名称,例如

class Car{
public $doors = 4;

}

然后您可以在变量中使用名称doors,然后将其称为

$text = 'doors';
$car = new Car();
$numberOfDoors = $car->{$text}; // this is like calling $car->doors

然后你可以用变量名创建自己的循环