我想在对象上调用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;
}
答案 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
然后你可以用变量名创建自己的循环