RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 885991
Accepted
Инопланетный гость
Инопланетный гость
Asked:2020-09-27 04:15:54 +0000 UTC2020-09-27 04:15:54 +0000 UTC 2020-09-27 04:15:54 +0000 UTC

php。如何将多维重复数组表示为“平面”数组(作为表格)?

  • 772

源数组:

$arr = array(
    array( 'a' => 'a1', 'child' => array()),

    array( 'a' => 'b1', 'child' => array(
        array( 'a' => 'b2', 'child' => array()),
        array( 'a' => 'b3', 'child' => array())
    )),

    array( 'a' => 'c1', 'child' => array(
        array( 'a' => 'c2', 'child' => array(
            array( 'a' => 'c3', 'child' => array(
                array( 'a' => 'c4', 'child' => array()),
                array( 'a' => 'c5', 'child' => array())
            )),         
            array( 'a' => 'c6', 'child' => array()),
        )),
        array( 'a' => 'c7', 'child' => array())
    )),

    array( 'a' => 'd1', 'child' => array(
        array( 'a' => 'd2', 'child' => array()),
        array( 'a' => 'd3', 'child' => array())
    )),

    array( 'a' => 'e1', 'child' => array(
        array( 'a' => 'e2', 'child' => array()),
        array( 'a' => 'e3', 'child' => array())
    ))
);

子元素的嵌套(嵌套深度)理论上可以是无限的(实际上最多50-60个)。您需要获取以下形式的数组:

$result = array(
    array('a1'),
    array('b1', 'b2'),
    array('b1', 'b3'),
    array('c1', 'c2', 'c3', 'c4'),
    array('c1', 'c2', 'c3', 'c5'),
    array('c1', 'c2', 'c6'),
    array('c1', 'c7'),
    array('d1', 'd2'),
    array('d1', 'd3'),
    array('e1', 'e2'),
    array('e1', 'e3')
);

那些。所有父元素都必须可追溯到结果数组中的最后一个子元素。

想出了这样的东西,但仍然不一样:

function make_table($arr, $level) {
    $level++;
    $child_out = null;
    $i = 0;
    foreach ($arr as $arr_tmp) {
        $i++;
        $out_tmp[$i][] = $arr_tmp['a'];
        if (count($arr_tmp['child']) > 0) {
            $child_out = make_table($arr_tmp['child'], $level);
        }
        if ($child_out != null) {
            if ($level == 1) {
                $out_tmp[$i] = array_merge($out_tmp[$i], $child_out);
            }
            else
            {
                $out_tmp = array_merge($out_tmp, $child_out);
            }
        }
        $child_out = null;
    }
    return $out_tmp;
}
echo "<pre>";
print_r(make_table($arr, 0));
echo "</pre>";

我已经把我的整个脑袋都弄坏了……有人有什么想法吗?

php
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Инопланетный гость
    2020-09-27T05:38:36Z2020-09-27T05:38:36Z

    我问自己,我回答自己:

    $table_out = null;
    function make_table2($arr, $out_tmp) {
        global $table_out;
        foreach ($arr as $arr_tmp) {
            $tmp = null;
            $tmp[] = $arr_tmp['a'];
            if (count($arr_tmp['child']) > 0) {
                make_table2($arr_tmp['child'], array_merge($out_tmp, $tmp));
            }
            else
            {
                $table_out[] = array_merge($out_tmp, $tmp);
            }
        }
        return 1;
    }
    make_table2($arr, array());
    echo "<pre>";
    print_r($table_out);
    echo "</pre>";
    

    输出:

    Array
    (
    [0] => Array
        (
            [0] => a1
        )
    
    [1] => Array
        (
            [0] => b1
            [1] => b2
        )
    
    [2] => Array
        (
            [0] => b1
            [1] => b3
        )
    
    [3] => Array
        (
            [0] => c1
            [1] => c2
            [2] => c3
            [3] => c4
        )
    
    [4] => Array
        (
            [0] => c1
            [1] => c2
            [2] => c3
            [3] => c5
        )
    
    [5] => Array
        (
            [0] => c1
            [1] => c2
            [2] => c6
        )
    
    [6] => Array
        (
            [0] => c1
            [1] => c7
        )
    
    [7] => Array
        (
            [0] => d1
            [1] => d2
        )
    
    [8] => Array
        (
            [0] => d1
            [1] => d3
        )
    
    [9] => Array
        (
            [0] => e1
            [1] => e2
        )
    
    [10] => Array
        (
            [0] => e1
            [1] => e3
        )
    
    )
    
    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5