V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yuptyy
V2EX  ›  PHP

php 无限极分类 不递归有好的办法么

  •  
  •   yuptyy · 2015-04-01 10:22:54 +08:00 · 4009 次点击
    这是一个创建于 3511 天前的主题,其中的信息可能已经有所发展或是发生改变。

    $arr = [
    1 => ['name' => '江苏', 'pid' => 0],
    2 => ['name' => '徐州', 'pid' => 1],
    3 => ['name' => '南京', 'pid' => 1],
    4 => ['name' => '泰州', 'pid' => 1],
    5 => ['name' => '靖江', 'pid' => 4],
    6 => ['name' => '西来', 'pid' => 5],
    7 => ['name' => '常州', 'pid' => 1],
    8 => ['name' => '新北区', 'pid' => 7],
    9 => ['name' => '百草苑', 'pid' => 8],
    10 => ['name' => '天宁区', 'pid' => 7]
    ];

    不使用递归, 引用 该怎么实现呢 0.0

    13 条回复    2015-04-02 03:15:46 +08:00
    mhycy
        1
    mhycy  
       2015-04-01 10:24:59 +08:00
    你想达到怎样的输出效果?
    ksc010
        2
    ksc010  
       2015-04-01 10:36:47 +08:00
    给每个分类记录他的parentid 和所有子类id
    yuptyy
        3
    yuptyy  
    OP
       2015-04-01 10:37:44 +08:00
    这样的效果

    [
    name => 江苏,
    pid => 0,
    child => [
    [
    name => 徐州,
    pid => 1,
    child => []
    ],
    [
    name => 泰州,
    pid => 1,
    child => [
    [
    name => 靖江,
    pid => 4,
    child => [
    name => 西来
    pid => 5,
    child => []
    ]
    ]
    ]
    ]
    ...
    ]
    @mhycy
    @mhycy
    alex321
        4
    alex321  
       2015-04-01 10:43:49 +08:00   ❤️ 1
    zhujinliang
        5
    zhujinliang  
       2015-04-01 10:50:43 +08:00
    用类
    invite
        6
    invite  
       2015-04-01 10:53:36 +08:00   ❤️ 1
    这个跟目录一个道理:

    用绝对路径,直接可以搜索以XX打头。
    否则相对路径都需要类似递归的吧。
    tabris17
        7
    tabris17  
       2015-04-01 11:01:30 +08:00   ❤️ 1
    左右值
    cevincheung
        8
    cevincheung  
       2015-04-01 11:03:35 +08:00
    http://www.oschina.net/code/snippet_173183_11767

    function genTree5($items) {
    foreach ($items as $item)
    $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
    return isset($items[0]['son']) ? $items[0]['son'] : array();
    }

    function genTree9($items) {
    $tree = array(); //格式化好的树
    foreach ($items as $item)
    if (isset($items[$item['pid']]))
    $items[$item['pid']]['son'][] = &$items[$item['id']];
    else
    $tree[] = &$items[$item['id']];
    return $tree;
    }
    sambohuang
        9
    sambohuang  
       2015-04-01 12:45:18 +08:00 via Android   ❤️ 1
    左右键
    ywisax
        10
    ywisax  
       2015-04-01 15:00:01 +08:00   ❤️ 1
    上面也提到了,用mptt吧。
    imink
        11
    imink  
       2015-04-01 19:53:40 +08:00   ❤️ 1
    楼主参考这个包。https://github.com/etrepat/baum
    elvba
        12
    elvba  
       2015-04-01 22:52:58 +08:00   ❤️ 1
    http://en.wikipedia.org/wiki/Nested_set_model
    嵌套集合模型,左右值
    Septembers
        13
    Septembers  
       2015-04-02 03:15:46 +08:00 via Android
    扔前端处理吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1857 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:18 · PVG 00:18 · LAX 08:18 · JFK 11:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.