PHP-Slice嵌套数组

PHP-Slice嵌套数组,php,arrays,recursion,Php,Arrays,Recursion,我有两个长度不同的嵌套数组。我想根据第一个数组来确定第二个数组的长度,请参见下面的示例来了解。只需删除第一个数组中不存在的所有项。有时第二个数组比第一个数组有更多的值,在这种情况下,我的树结构中断。 这些数组是嵌套数组,因此简单数组不起作用 $firstCount = (array_map('count', $actualTree)); $secondCount = (array_map('count', $emptyTree)); $chunk

我有两个长度不同的嵌套数组。我想根据第一个数组来确定第二个数组的长度,请参见下面的示例来了解。只需删除第一个数组中不存在的所有项。有时第二个数组比第一个数组有更多的值,在这种情况下,我的树结构中断。 这些数组是嵌套数组,因此简单数组不起作用

        $firstCount = (array_map('count', $actualTree));
        $secondCount = (array_map('count', $emptyTree));
        $chunk =  array_slice($actualTree, 0 , $second[$this->userId], true);
下面是数组的结构

第一阵列

第二阵列

预期产量

我正在尝试这种方法,但它不起作用

        $firstCount = (array_map('count', $actualTree));
        $secondCount = (array_map('count', $emptyTree));
        $chunk =  array_slice($actualTree, 0 , $second[$this->userId], true);
用例

我想做的事情是完全删除第一个数组中不存在的那些数组子元素。我正在建立一个二叉树多达三层。第一个数组已经有一个空值的二叉树。第二个数组是来自数据库的数据,我只是使用array_replace将空数据替换为实际数据。在第二个数组的值大于第一个数组的值之前,这是正常的。所以为了让它工作,我必须移除那些额外的元素

有谁能帮我把那里的长度调一调吗。任何帮助都将不胜感激。
提前感谢。

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

我不知道我是否能使它更紧密/更好,或者它是否会在任何附带情况下失败,但是:

  • 它适用于您的示例输入
  • 对我来说已经是午夜了,我很累,我必须在早上工作
  • 实际上,只要结构数组中存在相同级别的键,它就会同步递归地迭代每个数组,并将入口数组的每个级别存储到输出数组

    代码:()

    输出:

    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 (
                    ),
                  ),
                ),
              ),
            ),
          ),
        ),
      ),
    )
    

    出现了堆栈溢出奇迹。。。我得到了一个递归代码段来处理第一遍!通常我要花上一两个小时才能写出一些有用的东西

    我不知道我是否能使它更紧密/更好,或者它是否会在任何附带情况下失败,但是:

  • 它适用于您的示例输入
  • 对我来说已经是午夜了,我很累,我必须在早上工作
  • 实际上,只要结构数组中存在相同级别的键,它就会同步递归地迭代每个数组,并将入口数组的每个级别存储到输出数组

    代码:()

    输出:

    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 (
                    ),
                  ),
                ),
              ),
            ),
          ),
        ),
      ),
    )
    

    第一个数组无效。为什么你指的是嵌套数组的
    长度
    、键的总数或数组的深度?Hi@Tajniak。我只想让第二个数组的深度和第一个数组的深度相同。我想我错过了什么地方。您可以将此数组作为参考。请修复您的代码并粘贴您想要实现的示例输出。数组\u merge()可能是一个解决方案?我认为,此解释对于可能乐于帮助您(我正在考虑帮助您)的志愿者来说是一个基本的细节,应该在问题正文中介绍。第一个数组无效。为什么你指的是嵌套数组的
    长度
    、键的总数或数组的深度?Hi@Tajniak。我只想让第二个数组的深度和第一个数组的深度相同。我想我错过了什么地方。您可以将此数组作为参考。请修复您的代码并粘贴您想要实现的示例输出。array_merge()可能是一个解决方案?我觉得,此解释对于可能乐于帮助您(我正在考虑帮助您)的志愿者来说是一个基本的细节,应该在问题正文中介绍。非常感谢您的帮助兄弟。我现在离得太近了。它为第一个孩子提供了错误的输出。我将了解为什么它在该项目中不起作用。非常感谢您的帮助。我的工作忙得不可开交,但如果您给我一个3v4l的示例数据演示,它破坏了我的脚本,我会再看一看,但可能要过几天我才有空。请以与我在演示中相同的即时可用格式交付示例数据--
    var\u export()
    是您的朋友。当然兄弟。我会尝试修复它,但如果它出现问题,那么我将在3v4l为您创建一个示例。非常感谢您的帮助,兄弟。我现在离得太近了。它为第一个孩子提供了错误的输出。我将了解为什么它在该项目中不起作用。非常感谢您的帮助。我的工作忙得不可开交,但如果您给我一个3v4l的示例数据演示,它破坏了我的脚本,我会再看一看,但可能要过几天我才有空。请以与我在演示中相同的即时可用格式交付示例数据--
    var\u export()
    是您的朋友。当然兄弟。我将尝试修复它,但如果它出现问题,那么我将在3v4l为您创建一个示例。
    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 (
                    ),
                  ),
                ),
              ),
            ),
          ),
        ),
      ),
    )