我试图用一个字符串数组迭代一个对象,但是我很难做到这一点
我想要迭代的对象的 var_dump 的输出:
object(fooClass)#88(2) {
["property1:protected"]=> string(3) "foo"
["property2"]=> array(2) {
["foo1"]=> string(4) "foo1"
["foo2"]=> string(4) "foo2"}
}
(编辑)但是当我尝试使用arrayIterator使用此代码迭代对象时:
$obj = new ArrayObject($value);
$it = $obj->getIterator();
echo "iterating over: " . $obj->count() . " values <br />";
while ($it->valid()){
echo $it->key() . "=" . $it->current() . "<br />" ;
$it->next();
}
我有输出:
iterating over: 1 values
*property1=foo
编辑:我期待的是这样的:
iterating over 3 values
*property1=foo
*foo1=foo1
*foo2=foo2
答案 0 :(得分:0)
while ($it->valid())
{
$key = $it->key();
$value = $it->current();
// ...
$it->next();
}
使用循环进行迭代,当it->valid()
返回false时,循环将终止。
答案 1 :(得分:0)
这里需要一个循环循环。你的数组有子数组,所以你需要循环两次。你的第一个循环通过第一个数组,然后检查值是否为数组,如果它是一个数组,那么你需要再次循环内部值。
示例:
$array = array('property1' => 'foo',
'property2' => array('foo1', 'foo2')
);
$arrayobject = new ArrayObject($array);
$iterator = $arrayobject->getIterator();
while($iterator->valid()) {
if(is_array($iterator->current())){
$arrayobject_2 = new ArrayObject($iterator->current());
$it = $arrayobject_2->getIterator();
while($it->valid()) {
echo $it->key() . ' => ' . $it->current() . "\n";
$it->next();
}
} else
echo $iterator->key() . ' => ' . $iterator->current() . "\n";
$iterator->next();
}