Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过使用php获取mysql数据以父级和子级方式构建数组_Php_Mysql_Arrays_Parent Child - Fatal编程技术网

如何通过使用php获取mysql数据以父级和子级方式构建数组

如何通过使用php获取mysql数据以父级和子级方式构建数组,php,mysql,arrays,parent-child,Php,Mysql,Arrays,Parent Child,这是我获取mysql记录的代码 $parentChildArr=array(); //mysql query for fetching parent and child record $selectparentMenu=mysql_query("SELECT `id`,`item_name`,`menu_type`,`parent` FROM `epic_master_menu`"); if(mysql_num_rows($selectparentMenu)>1) { whi

这是我获取mysql记录的代码

$parentChildArr=array();
//mysql query for fetching parent and child record
$selectparentMenu=mysql_query("SELECT `id`,`item_name`,`menu_type`,`parent` FROM `epic_master_menu`"); 

    if(mysql_num_rows($selectparentMenu)>1) {

while($fetchparentMenu=mysql_fetch_array($selectparentMenu)) {
$parentChildArr[]=$fetchparentMenu['id'];
$parentChildArr[]=$fetchparentMenu['item_name'];
$parentChildArr[]=$fetchparentMenu['menu_type'];
$parentChildArr[]=$fetchparentMenu['parent'];
}

var_export($parentChildArr); // exporting or printing arrays
//当我导出数组时,我得到这个输出

   array ( 0 => '1', 1 => 'Dashboard', 2 => 'item', 3 => '0',
 4 => '2', 5 => 'Admission', 6 => 'item', 7 => '0', 8 => '3', 
9 => 'Examination', 10 => 'item', 11 => '0', 12 => '4', 
13 => 'CET', 14 => 'item', 15 => '0');
但问题是我想这样构建阵列

  $newarr=array ( 'dataSource' => array ( 0 => array ( 'id' => '1', 
'text' => 'Dashboard', 'expanded' => 'true', 'spriteCssClass' => 'rootfolder', 
'items' => array ( 0 => array ( 'id' => '89', 'text' => 'Users', 
'expanded' => true, 'spriteCssClass' => 'folder', 
'items' => array ( 0 => array ( 'id' => '94', 'text' => 'Users',
 'spriteCssClass' => 'html', ), 1 => array ( 'id' => '94', 
'text' => 'Users', 'spriteCssClass' => 'html', ), 2 => array ( 
'id' => '94', 'text' => 'Users', 'spriteCssClass' => 'image' ) ) ) ) ) ));
数据库表视图是。。。

我不知道如何像$newarr那样构建数组。谢谢

使用以下代码

$m=0;
if(mysql_num_rows($selectparentMenu)>1) {

while($fetchparentMenu=mysql_fetch_array($selectparentMenu)) {
$parentChildArr[$m][]=$fetchparentMenu['id'];
$parentChildArr[$m][]=$fetchparentMenu['item_name'];
$parentChildArr[$m][]=$fetchparentMenu['menu_type'];
$parentChildArr[$m][]=$fetchparentMenu['parent'];
$m++;
}

未测试,但您需要定义一个结构,然后需要进行递归。。。所以你可以检查我孩子的家长条目在哪里

function structure($data){
    return array(
        'id' => $data['id'],
        'item_name' => $data['item_name'],
        'menu_type' => $data['menu_type'],
        'parent' => $data['parent'],
        'expanded' => false,
        'childs' => array()
    );
}

function recursiveImport(&$parent, $data){
    foreach($parent AS $key => $value){
        if($value['id'] == $data['parent']){
            $parent[$key]['childs'][] = structure($data);
            $parent[$key]['expanded'] = true;
            return true;
        }
        else{
            if(count($value['childs']) > 0){
                foreach($value['childs'] AS $key2 => $child){
                    $result = recursiveImport($parent[$key]['childs'][$key2], $data);
                    if($result === true) return true;
                }
            }
        }
    }
    return false;
}

$newarr = array();    
while($fetchparentMenu=mysql_fetch_array($selectparentMenu)) {
    $result = recursiveImport($newarr , $fetchparentMenu);
    if($result === false){
        $newarr[] = structure($fetchparentMenu);
    }
}

//output array

数组(0=>array('id'=>'1','item_name'=>'Dashboard','menu_type'=>'item','parent'=>'0','expanded'=>false,'childs'=>array(),),1=>array('id'=>'2','item_name'=>'Admission','menu type'=>'item','parent'=>'0','expanded'=>false,'childs'=>array()),2=>array('id'=>'3'、'item'=>'检查'、'menu'u-type'=>'item'、'parent'=>'0'、'expanded'=>false、'childs'=>array(),)3=>数组('id'=>'4'、'item'u-name'=>'CET'、'menu-type'=>'item'、'parent'=>'0'、'expanded'=>false、'childs'=>array(),)

您的两个数组都有不同的值。请使用实际获得的数组中的值显示预期结果,以便我们能够关联。使用数据库视图显示更多详细信息只会更改三个值一个是id另一个是文本,第三个是展开的。如果项有子项,则展开的值为true,否则为truefalse@Md.SahadatHossain我添加了表视图,请检查out@SankalpMishra请检查gaini已更新请再次阅读问题,然后您将了解我想要什么类型的阵列。如果您编辑了一些错误,这将不会生成您希望的输出,但这是一个很好的展示您应该做什么:)看到我文章的编辑页面,希望我得到所有^^,在stackoverflow的textarea上开发不是一个好主意;)我想问最后一个疑问,那就是我在结构函数中编写了一些静态数组。这个结构函数只是为每个具有相同字段的子/父菜单项构建一个数组:)。。。您可以更改名称,但也需要更改if:if($value['item\u name']==$data['parent'])