如何创建从简单的多维数组的嵌套的PHP数组 [英] How to create nested PHP array from simple multidimensional array

查看:144
本文介绍了如何创建从简单的多维数组的嵌套的PHP数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个PHP数组如下:

 阵列

    [1] =>排列
        (
            [ID] => 1
            [名] =>大类
            [PARENT_ID] =>空值
        )    [2] =>排列
        (
            [ID] => 2
            [名] =>子类别
            [PARENT_ID] => 1
        )    [3] =>排列
        (
            [ID] => 3
            [名] =>子类别
            [PARENT_ID] => 2
        )    [4] =>排列
        (
            [ID] => 4
            [名] =>主要类别1
            [PARENT_ID] =>空值
        )    [5] =>排列
        (
            [ID] =>五
            [名] =>子类1
            [PARENT_ID] => 4
        )
    [6] =>排列
        (
            [ID] => 6
            [名] =>子类1
            [PARENT_ID] =>五
        ))

和我想这个数组下使用PHP被转换为

  $类=阵列(
    阵列(
        'ID'=> 1,
        '名称'=> 主目录,
        '子'=>阵列(
            ID => 2,
            '名称'=> 子类别,
            '子'=>阵列(
                'ID'=> 3,
                '名称'=> 子类别,
                '子'=> '没有',
            )
        )
    )
    阵列(
        'ID'=> 4,
        '名称'=> 主类别1
        '子'=>阵列(
            ID => 5,
            '名称'=> 子类别1,
            '子'=>阵列(
                'ID'=> 6,
                '名称'=> 子类别1,
                '子'=> '没有',
            )
        )
    )
);

其实我有一个3级列表层次结构,看起来像这样

  A 1级
 A中B 2级
 一个在C 2级
   ℃下在维生素D水平3Ë1级
˚F1级
  使用F摹2级

如果提供的信息是不够的,请问我意见的任何问题。所以我给出的例子最终输出的外观如下图

主要类别
  子类别
    孩子

主要类别1
  子类2
    子类3

下面是我试过了。

 的foreach($所属分类为$关键=> $值){
            如果($值 - >!getCategoryId()= 1){
                $类[$关​​键] ['身份证'] = $值 - > getCategoryId();
                $类[$关​​键] ['名'] = $值 - >的getName();
// $类别[$关键] ['PARENT_ID'] = $值 - > getParentCategoryIds();
                $类[$关​​键] ['子'] = $这个 - > createSubCategoryArray($值 - > getCategoryId(),$所属分类);
            }
        }
 公共职能createSubCategoryArray($ parentCatId,$所属分类)
        {
            的foreach($所属分类为$关键=> $类){
                如果($分类 - > getCategoryId()== $ parentCatId&放大器;&放大器; $分类 - >!getCategoryId()= 1){
                    回声字符串;
                    返回阵列(
                        'ID'=> $分类 - > getCategoryId()
                        '名'=> $分类 - >的getName()
                        '子'=> $这个 - > createSubCategoryArray($类别 - > getCategoryId(),$所属分类)
                    );
                }
            }
        }


解决方案

您可以尝试这样的事情,并可以修改它按照您的要求。

 为($ I = 0; $ I<计数($ ARR); $ I ++){    如果($改编[$ i] ['PARENT_ID'] == NULL){
        $数据[] =数组(
            'ID'=> $常用3 [$ i] ['身份证'],
            '名称'=> $常用3 [$ i] ['名'],
            '子'=>阵列()
        );
    } ELSEIF($改编[$ i] ['PARENT_ID']!= NULL){
        为($ J = 0; $ J<计数($数据); $ J ++){
            如果($数据[$ J] ['身份证'] == $改编[$ i] ['PARENT_ID']){
                $数据[$ J] ['子'] [] = createChild所($改编[$ i]);
            }其他{
                为($ k = 0; $ K<计数($数据[$ J] ['子']); $ķ++){
                    如果($数据[$ J] ['子'] [$ k]的[ID] == $改编[$ i] ['PARENT_ID']){
                        $数据[$ J] ['子'] [$ k]的['子'] = createChild所($改编[$ i]);
                    }
                }
            }
        }
    }
}功能createChild所($ OBJ){
    返回阵列(
        'ID'=> $ OBJ ['身份证'],
        '名'=> $ OBJ ['名'],
        PARENT_ID'=> $ OBJ ['PARENT_ID'],
        '子'=>阵列()
    );
}

I have a PHP array as follows

Array
(
    [1] => Array
        (
            [id] => 1
            [name] => Main Category
            [parent_id] => null
        )

    [2] => Array
        (
            [id] => 2
            [name] => sub category
            [parent_id] => 1
        )

    [3] => Array
        (
            [id] => 3
            [name] => child category
            [parent_id] => 2
        )

    [4] => Array
        (
            [id] => 4
            [name] => Main category 1
            [parent_id] => null
        )

    [5] => Array
        (
            [id] => 5
            [name] => sub category 1
            [parent_id] => 4
        )
    [6] => Array
        (
            [id] => 6
            [name] => child category 1
            [parent_id] => 5
        )

)

and I want this array to be converted as below using PHP

$categories = array(
    array(
        'id' => 1,
        'Name' => "Main Category",
        'sub' => array(
            id => 2,
            'Name' => 'Sub Category',
            'sub' => array(
                'id' => 3,
                'Name' => 'Child category',
                'sub' => 'None',
            )
        )
    ),
    array(
        'id' => 4,
        'Name' => "Main Category 1",
        'sub' => array(
            id => 5,
            'Name' => 'Sub Category 1',
            'sub' => array(
                'id' => 6,
                'Name' => 'Child category 1',
                'sub' => 'None',
            )
        )
    )
);

Actually I have a 3 level list hierarchy that looks something like this

A 1 level
 B 2 level under A
 C 2 level under A
   D level 3 under C

E 1 level
F 1 level 
  G 2 level under F

If provided information is not enough please ask me any question in comment. So the final output for my given example will look as below

Main category sub category child

Main category 1 sub category 2 child category 3

Here is what I tried.

foreach ($categoryList as $key => $value) {
            if ($value->getCategoryId()!=1) {
                $category[$key]['id'] = $value->getCategoryId();
                $category[$key]['name'] = $value->getName();
//                $category[$key]['parent_id'] = $value->getParentCategoryIds();
                $category[$key]['sub'] = $this->createSubCategoryArray($value->getCategoryId(), $categoryList);
            }
        }


 public function createSubCategoryArray($parentCatId, $categoryList)
        {
            foreach ($categoryList as $key => $category) {
                if($category->getCategoryId() == $parentCatId && $category->getCategoryId()!=1){
                    echo "string";
                    return array(
                        'id' => $category->getCategoryId(),
                        'name' => $category->getName(),
                        'sub' => $this->createSubCategoryArray($category->getCategoryId(), $categoryList)
                    );
                }
            }
        }

解决方案

You can try something like this and can modify it as per your requirement

for($i=0;$i<count($arr);$i++){

    if( $arr[$i]['parent_id'] == null ){
        $data[] = array(
            'id' => $arr[$i]['id'],
            'Name' => $arr[$i]['name'],
            'sub' => array()
        );
    }elseif( $arr[$i]['parent_id'] != null){
        for($j=0;$j<count($data);$j++){
            if( $data[$j]['id'] == $arr[$i]['parent_id'] ){
                $data[$j]['sub'][] = createChild($arr[$i]); 
            }else{
                for($k=0;$k<count($data[$j]['sub']);$k++){
                    if($data[$j]['sub'][$k]['id'] == $arr[$i]['parent_id']){
                        $data[$j]['sub'][$k]['sub'] = createChild($arr[$i]);    
                    }
                }
            }
        }
    }
}

function createChild($obj){
    return array(
        'id' => $obj['id'],
        'name' => $obj['name'],
        'parent_id' => $obj['parent_id'],
        'sub' => array()
    );
}

这篇关于如何创建从简单的多维数组的嵌套的PHP数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆