当子数组仅包含一个具有数字索引的元素时,php 会展平到父级

苏布拉

我试图将子数组数据移动到父数组,如果它只包含一个元素并且父数组键是数字。我不想完全压平它。我想保留数组的结构。除了顶部的一个之外,所有子数组都不应该有数字键。

我的输入数据:

[8] => Array
    (
        [any] => Array
            (
                [0] => Array
                    (
                        [all] => Array
                            (
                                [0] => stdClass Object
                                    (
                                        [f] => test1

                                    )

                                [1] => Array
                                    (
                                        [0] => Array
                                            (
                                                [any] => Array
                                                    (
                                                        [0] => Array
                                                            (
                                                                [all] => Array
                                                                    (
                                                                        [0] => stdClass Object
                                                                            (
                                                                                [f] => test2

                                                                            )

                                                                        [1] => stdClass Object
                                                                            (
                                                                                [f] => test3

                                                                            )

                                                                    )

                                                            )

                                                    )

                                            )

                                    )

                            )

                    )

            )

    )

)

我想要的输出:

[8] => Array
                    (
                        [any] => Array
                            (
                                [all] => Array
                                    (
                                        [0] => stdClass Object
                                            (
                                                [f] => test1

                                            )


                                        [any] => Array
                                                    (
                                                        [all] => Array
                                                            (
                                                                [0] => stdClass Object
                                                                    (
                                                                        [f] => test2

                                                                    )

                                                                [1] => stdClass Object
                                                                    (
                                                                        [f] => test3

                                                                    )

                                                            )

                                                    )

                                            )

                                    )

                            )

                    )

我正在尝试使用多维数组。我尝试了以下功能。

  public function flattenKeyZero(&$arr)    {

        foreach ($arr as $k => &$v) {

            if (is_array($v)) {

                if ( (count($v) == 1 && is_numeric(key($v)) )    ) { // Check count and key if numeric; Check count and parent array contains only all or any
                    $arr[$k] = reset($v);                      // Return child array by reset
                }else {
                    $this->flattenKeyZero($v);
                }

                }
            }

        }

          do {
            $temp = $arr;
            $this->flattenKeyZero($arr);
        }while ($temp != $arr ) ;

我得到了以下输出。一切看起来都不错,除了我无法修改它以满足条件“所有子数组都不应该有数字键”

  [8] => Array
                    (
                        [any] => Array
                            (
                                [all] => Array
                                    (
                                        [0] => stdClass Object
                                            (
                                                [f] => test

                                            )

                                        [1] => Array
                                            (
                                                [any] => Array
                                                    (
                                                        [all] => Array
                                                            (
                                                                [0] => stdClass Object
                                                                    (
                                                                        [f] => test

                                                                    )

                                                                [1] => stdClass Object
                                                                    (
                                                                        [f] => test

                                                                    )

                                                            )

                                                    )

                                            )

                                    )

                            )

                    )

            )

我也尝试添加额外的 elseif 条件,但它似乎不起作用..

   elseif((is_numeric($k) && (key($v) == 'all' || key($v) == 'any') && count($v) == 1 )){                 // if all or any are under numeric index array , remove numeric index array and move a level up
                    $arr[key($v)] = reset($v);
                }
埃尔文

一种方法是reset()在检查计数和 if is_numeric 之后使用

foreach ($arr as $key => $value) {
    if (count($value) == 1 && is_numeric(key($value))) { // Check count and key if numeric
        $arr[$key] = reset($value);                      // Return child array by reset
    }
}

print_r($arr);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么将大型字典从 python 传递到 julia 会展平包含的多维列表?

使用mongodb展平父级子级集合

父级到子级事件

Angular 父级到子级

querySelector 子级到父级

xslt更改父级->子级到子级->父级

如何为一个父级的子元素赋予比另一个父级更高的z索引?

Flex父级不会扩展到子级的高度

在父级中调用函数并将`this`绑定到子级?

$ http请求父级到子级控制器

如何缩小父级div到其子级的大小?

角向父级到子级绑定更改检测

Vue stopPropagation不起作用-子级到父级

父级属性未绑定到子级(Ember 2.8)

处理 JSON 以创建子级到父级的层次关系

Flutter 子级到父级回调

Oracle CONNECT BY递归子级到父级查询,包括自我引用的最终父级

将父级的子类的数据复制到具有相同父级的另一个类

从子级到子级到父级表的SQL查询

Angular - 从其他组件刷新组件:子级到父级,然后父级到另一个子级通信

删除所有数字索引以仅具有一个assoc数组

当父项将所有子元素对齐到中心时,将一个子元素向左对齐

如果父级具有 (15,45,75,105) 个元素,则仅隐藏最后一个元素(仅限 CSS)

查找具有特定一级后代的第一个父元素

无法将@Input绑定到父级到子级Angular 2

将数据从子级传递到父级并传递到另一个子级组件React Js

可以绑定到父级的子窗口上的事件吗?

FancyTree>将父级扩展到活动的子节点

Rails activerecord 找到父级给定的子模型 ID,当父级有一个子 ID 数组的字段时