【问题标题】:PHP(Codeigniter) building array tree assign key name respectively to Grand child of arrayPHP(Codeigniter)构建数组树将键名分别分配给数组的Grand child
【发布时间】:2016-02-19 07:27:40
【问题描述】:

在不同论坛上进行了太多搜索后,我决定寻求帮助。我正在为

构建数据数组

美国 ->
电视频道 ->
戏剧 ->
剧集

如您所见,有四个级别。我正在使用此代码来开发它

defined('BASEPATH') OR exit('No direct script access allowed');

class Welcome extends CI_Controller {

public function index() {
    $arr = array(
        array(
            'id' => 100,
            'dramaID' => 0,
            'Country name' => 'America'
        ),
        array(
            'id' => 101,
            'dramaID' => 100,
            'Channels' => 'Tv Channels',
            'url' => ''
        ),
        array(
            'id' => 102,
            'dramaID' => 101,
            'Dramaname' => 'Taken',
            'url' => ''
        ),
        array(
            'id' => 103,
            'dramaID' => 102,
            'Episodename' => 'Episode 1',
            'url' => ''
        )
    );

// 匹配iddramaID 的项目嵌套在children 数组中

    $results = $this->array_tree($arr, 'id', 'dramaID', 'channels');
    echo"<pre>";
    print_r($results);
}

function array_tree($arr, $main_index, $parent_index, $child_index) {

    $new = array();
    foreach ($arr as $a) {
        $new[$a[$parent_index]][] = $a;
    }

    // we create a closure in order to be recursive
    function create_tree(&$list, $parent, $i, $c) {
        $tree = array();
        foreach ($parent as $k => $l) {
            if (isset($list[$l[$i]])) {
                $l[$c] = create_tree($list, $list[$l[$i]], $i, $c);
            }
            $tree[] = $l;
        }
        return $tree;
    }

    return create_tree($new, $new[0], $main_index, $child_index);
}

} 并给出这个输出

需要输出

请帮忙。我需要在代码中做哪些更改才能传递键名?

【问题讨论】:

    标签: php mysql arrays codeigniter


    【解决方案1】:

    如果您在数组中包含“类型”,然后使用如下条件

    <?php
     $arr = array(
        array(
            'id' => 100,
            'parentid' => 0,
            'type' => 'country',
            'Country name' => 'America'
        ),
        array(
            'id' => 101,
            'parentid' => 100,
            'Channels' => 'Tv Channels',
            'type' => 'channel',
            'url' => ''
        ),
        array(
            'id' => 102,
            'parentid' => 101,
            'Dramaname' => 'Taken',
            'type' => 'drama',
            'url' => ''
        ),
        array(
            'id' => 103,
            'parentid' => 102,
            'Episodename' => 'Episode 1',
            'type' => 'episode',
            'url' => ''
        ),
             array(
            'id' => 104,
            'parentid' => 103,
            'Episodename' => 'Episode 2',
            'type' => 'episode',
            'url' => ''
        ),
      array(
            'id' => 105,
            'parentid' => 103,
            'Episodename' => 'Episode 2',
            'type' => 'episode',
            'url' => ''
        ),
     array(
            'id' => 106,
            'parentid' => 103,
            'Episodename' => 'Episode 4',
            'type' => 'episode',
            'url' => ''
        )
    );
    
    
     $results = array_tree($arr, 'id', 'parentid', 'channels');
    echo"<pre>";
      print_r($results);
    
    
    function array_tree($arr, $main_index, $parent_index, $child_index) {
    
    $new = array();
    foreach ($arr as $a) {
        $new[$a[$parent_index]][] = $a;
    }
    
    // we create a closure in order to be recursive
    function create_tree(&$list, $parent, $i, $c) {
        $tree = array();
        foreach ($parent as $k => $l) {
               if (isset($list[$l[$i]])) {
                   foreach ($list[$l[$i]] as $nouman=>$abc){
                        if($abc['type']=='country'){
                            $l['country'] = create_tree($list, $list[$l[$i]], $i, 'country');
                       }
    
                       if($abc['type']=='channel'){
                            $l['channel'] = create_tree($list, $list[$l[$i]], $i, 'channel');
                       }
    
                          if($abc['type']=='drama'){
                            $l['drama'] = create_tree($list, $list[$l[$i]], $i, 'drama');
                       }
    
                        if($abc['type']=='episode'){
                            $l['episode'] = create_tree($list, $list[$l[$i]], $i, 'episode');
                       }
    
                   }
    
              }
            $tree[] = $l;
        }
        return $tree;
    }
    
    return create_tree($new, $new[0], $main_index, $child_index);
    
    }
    
    ?>
    

    【讨论】:

    • 轰隆隆!奇迹般有效 ! :) 非常感谢您的帮助
    【解决方案2】:

    如果你想要一个分层数组结构。你可以像这样创建数组

    $arr = array(
        array(
            'id' => 100,
            'dramaID' => 0,
            'Country name' => 'America'
        ),
        array(
            'id' => 101,
            'dramaID' => 100,
            'Channels' => 'Tv Channels',
            'url' => ''
        ),
        array(
            'id' => 102,
            'dramaID' => 101,
            'Dramaname' => 'Taken',
            'url' => ''
        ),
        array(
            'id' => 103,
            'dramaID' => 102,
            'Episodename' => 'Episode 1',
            'url' => ''
        )
    );
    

    【讨论】:

    • 是的,使用相同的结构。您知道如何使用此代码更改子数组的键名吗?
    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    相关资源
    最近更新 更多