挣扎着用一个字符串数组迭代一个对象

时间:2017-07-05 10:23:05

标签: php

我试图用一个字符串数组迭代一个对象,但是我很难做到这一点

我想要迭代的对象的 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

2 个答案:

答案 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();
}

工作链接:https://3v4l.org/1eS3Q