为了账号安全,请及时绑定邮箱和手机立即绑定

PHP - 切片嵌套数组

PHP - 切片嵌套数组

PHP
噜噜哒 2023-03-04 14:30:59
我有两个不同长度的嵌套数组。我想根据第一个数组制作第二个数组的长度,请参阅下面的示例以了解情况。只需删除第一个数组中不存在的所有项目。有时第二个数组比第一个数组有更多的值,在这种情况下我的树结构中断了。这些数组是嵌套数组,所以简单的 array_slice 不起作用。这是数组的结构。第一个数组 "1": {    "id": "1",    "username": "username",    "children": [      {        "id": "-1",        "username": "NULL",        "children": [          {            "id": "-1",            "username": "NULL",            "children": [              {                "id": "-1",                "username": "NULL",                "children": []              }            ]          }        ]      }    ]  }第二阵列"157": {    "id": "157",    "username": "test1",    "children": [      {        "id": "158",        "username": "test1",        "children": [          {            "id": "159",            "username": "test2",            "children": [              {                "id": "160",                "username": "test3",                "children": []              },              {                "id": "160",                "username": "KICK ME BECAUSE I M NOT EXIST IN FIRST ARRAY",                "children": []              }            ]          }        ]      },      {        "id": "160",        "username": "KICK ME BECAUSE I M NOT EXIST IN FIRST ARRAY",        "children": [          {            "id": "159",,            "username": "KICK ME BECAUSE I M NOT EXIST IN FIRST ARRAY",            "children": [              {                "id": "161",                "username": "KICK ME BECAUSE I M NOT EXIST IN FIRST ARRAY",                "children": []              }            ]          }        ]      }    ]  }我想做的是完全删除第一个数组中不存在的那些数组子项。我正在构建一个最多三层的二叉树。第一个数组已经有一个空值的二叉树。第二个数组是来自数据库的数据,我只是使用 array_replace 将空数据替换为实际数据。在第二个数组比第一个数组有更多的值之前,这一直很好用。所以为了让它工作,我必须删除那些额外的元素。任何人都可以帮助我使那里的长度相同。任何帮助将不胜感激。提前致谢。
查看完整描述

1 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

发生了 Stack Overflow 奇迹......我得到了一个递归代码片段来处理第一遍!通常我要花一两个小时才能写出有用的东西。

我不知道我是否可以使它更紧/更好,或者它是否会在任何边缘情况下失败,但是:

  1. 它适用于您的样本输入

  2. 对我来说现在是午夜,我累了,我必须在早上工作

实际上,只要结构数组中存在相同级别的键,它就会同步递归地迭代每个数组并将条目数组的每个级别存储到输出数组。

代码:(演示

function truncateRecursive($structure, $entry) {

    $output = [];

    while (($structureKey = key($structure)) !== null && ($entryKey = key($entry)) !== null) {

        $output[$entryKey] = !is_array($entry[$entryKey])

            ? $entry[$entryKey]

            : truncateRecursive($structure[$structureKey], $entry[$entryKey]);

        unset($structure[$structureKey], $entry[$entryKey]);    

    }

    return $output;

}


var_export(truncateRecursive($structure, $entry));

输出:


array (

  157 => 

  array (

    'id' => '157',

    'username' => 'test1',

    'children' => 

    array (

      0 => 

      array (

        'id' => '158',

        'username' => 'test1',

        'children' => 

        array (

          0 => 

          array (

            'id' => '159',

            'username' => 'test2',

            'children' => 

            array (

              0 => 

              array (

                'id' => '160',

                'username' => 'test3',

                'children' => 

                array (

                ),

              ),

            ),

          ),

        ),

      ),

    ),

  ),

)


查看完整回答
反对 回复 2023-03-04
  • 1 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信