对stdClass对象使用array_walk_recursive()

Rya*_*iss 5 php multidimensional-array array-walk

我在这里浏览了一些答案,但是似乎没有利用这种方法?

我有一组项目,这些项目是对象。该对象可以具有一个键,该键是“子级”,而“子级”是一组对象等。

有没有办法做到这一点?

例:

    Array
    (
        [1] => stdClass Object
            (
                [id] => 1
                [name] => Steve King
                [image] => upload/shop/fe7a66254e4249af2b0093efca75a914.jpg
                [parent] => 0
                [children] => Array
                    (
                    )

            )

        [2] => stdClass Object
            (
                [id] => 2
                [name] => Eden Hall
                [image] => upload/shop/064f60a98deba612e437ac549f1dc05d.jpg
                [parent] => 0
                [children] =>Array
                    (
                        [1] => stdClass Object
                            (
                              [id] => 1
                              [name] => Steve King
                              [image] => upload/shop/fe7a66254e4249af2b0093efca75a914.jpg
                              [parent] => 0
                              [children] => Array
                                  (
                                  )

                   )
            )
        [3] => stdClass Object
            (
                [id] => 3
                [name] => Paula Johnson
                [image] => upload/shop/1492a323090afbad07c35cf93fe6bdda.jpg
                [parent] => 0
                [children] => Array
                    (
                    )

            )

        [4] => stdClass Object
            (
                [id] => 4
                [name] => Ethan Watson
                [image] => upload/shop/677c720333af33bc58d0684d79918e03.jpg
                [parent] => 0
                [children] => Array
                    (
                    )

            )

        [5] => stdClass Object
            (
                [id] => 5
                [name] => Abigail Adams
                [image] => upload/shop/da1734277322fc3b2e84a9ddbcc2e2f1.jpg
                [parent] => 0
                [children] => Array
                    (
                    )

            )
Run Code Online (Sandbox Code Playgroud)

Sah*_*ati 6

在 下分配对象数组$array

解决方案1:将 json_encode一个对象数组变成a json,然后将a转换jsonassociative array.

$result=json_decode(json_encode($array),true);
array_walk_recursive($result, function($value,$key){
    print_r($value);
    print_r($key);
});
Run Code Online (Sandbox Code Playgroud)

解决方案 2: 迭代数组并将每个类型转换objectarray.

array_walk($array,function(&$value,$key){
    $value=(array) $value;
});
array_walk_recursive($array, function($value,$key){
    print_r($value);
    print_r($key);
});
Run Code Online (Sandbox Code Playgroud)


小智 5

您始终可以为某些数据结构实现自定义递归迭代器。它可以是一个更灵活的解决方案。例如:

class MyIterator extends \IteratorIterator implements 
\RecursiveIterator
{
    public function hasChildren()
    {
        $current = $this->current();

        if (is_array($current) and $this->key() === 'children') {
            return true;
        }

        return is_object($current);
    }

    public function getChildren()
    {
        /* $current is array (for key 'children') or \stdClass obj*/

        $current = $this->current();

        return new MyIterator(new \ArrayObject($current));
    }
}

$rii = new \RecursiveIteratorIterator(new MyIterator(new 
\ArrayObject($data)));

foreach ($rii as $key => $value) {
    print_r($key);
    print_r($value);
}
Run Code Online (Sandbox Code Playgroud)