将函数应用于数组节点,直到数组节点不是数组


Apply function to array nodes until not array nodes are arrays

假设我有一个数组中的结构:

Array
(
    [0] => Array
        (
            [0] => Heading1
            [1] => Array
                (
                    [0] => Array
                        (
                            [0] => 2
                            [1] => Heading2.1
                        )
                    [1] => Array
                        (
                            [0] => 2
                            [1] => Heading2.2
                        )
                )
        )
    [1] => Array
        (
            [0] => Heading1.2
        )
)

如何将函数仅应用于持有标题 2.1 和标题 2.2 的数组元素?

我想应用的函数可能会进一步嵌套数组。如何使我的函数也能在这些新创建的数组上运行?然后创建的数组,直到第二深的级别没有数组?

递归遍历它,使用 is_array() 函数检查它是否是一个数组,如果是,则应用您的函数。

朴素的递归是不行的,重新运行递归是双重否。这里要使用的是拓扑排序。

在计算机科学中,有向图的拓扑排序(有时缩写为topsort或toposort)或拓扑排序是其顶点的线性排序,使得对于每个边uv,u在排序中都位于v之前。

您可以使用

array_walk() 并在您将在每个节点上执行的函数中测试内容是否为数组...

http://php.net/manual/en/function.array-walk.php