Php 操作ResultSet数组并使其多维化

Php 操作ResultSet数组并使其多维化,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我正在开发一个函数,该函数基于左外联接从三个表中获取数据,如下所示: public function get_full_category_history($id) { $id = mysqli_real_escape_string($this->_con,$id); if (isset($id) && $id != "") { $query = "SELECT qz_categories.id as category_

我正在开发一个函数,该函数基于左外联接从三个表中获取数据,如下所示:

public function get_full_category_history($id) {
        $id = mysqli_real_escape_string($this->_con,$id);
        if (isset($id) && $id != "") {
            $query = "SELECT qz_categories.id as category_id, qz_categories.name as category_name, qz_quizzes.id as quiz_id, qz_quizzes.name as quiz_name, qz_questions.id as question_id, qz_questions.question as question FROM qz_categories LEFT OUTER JOIN qz_quizzes ON qz_categories.id = qz_quizzes.category_id LEFT OUTER JOIN qz_questions ON qz_quizzes.id = qz_questions.quiz_id WHERE ( qz_categories.id = '".$id."')";
        }
        $categoriesList = mysqli_query($this->_con, $query) or die(mysqli_error($this->_con));

        $count = $categoriesList->num_rows;
        $result = '';
        $i = 0;
        if ($count > 0) {
            while($row = mysqli_fetch_array($categoriesList)){
                $result[$i]['category_id'] = $row['category_id'];
                $result[$i]['category_name'] = $row['category_name'];
                $result[$i]['quiz_id'] = $row['quiz_id'];
                $result[$i]['quiz_name'] = $row['quiz_name'];
                $result[$i]['question_id'] = $row['question_id'];
                $result[$i]['question'] = $row['question'];
                $i++;
            }
            return $result;
        }else{
                return FALSE;
            }
    }
完成此操作后,我得到了此阵列:

Array
(
    [0] => Array
        (
            [category_id] => 1
            [category_name] => Preschool
            [quiz_id] => 1
            [quiz_name] => What is Forex?
            [question_id] => 1
            [question] => In forex, what are the three main types of analysis?
        )

    [1] => Array
        (
            [category_id] => 1
            [category_name] => Preschool
            [quiz_id] => 1
            [quiz_name] => What is Forex?
            [question_id] => 2
            [question] => Which type of analysis looks at historical price movements to determine the current trading conditions?
        )

    [2] => Array
        (
            [category_id] => 1
            [category_name] => Preschool
            [quiz_id] => 2
            [quiz_name] => Why Trade Forex?
            [question_id] => 
            [question] => 
        )

)
但我想要的是:

Array
(
    [0] => Array
        (
            [category_id] => 1
            [category_name] => Preschool
            ['Preschool']=>Array(
                0=> array(
                            [quiz_id] => 1
                            [quiz_name] => What is Forex?
                            [What is Forex?]=>Array(
                                    0=>array(
                                                [question_id] => 1
                                                [question] => In forex, what are the three main types of analysis?
                                    ),
                                    1=>array(
                                                [question_id] => 2
                                                [question] => Which type of analysis looks at historical price movements to determine the current trading conditions?
                                    )
                                )
                ),
                1=>array(
                            [quiz_id] => 2
                            [quiz_name] => Why Trade Forex?
                            [Why Trade Forex?]=>Array(

                                )
                )
        )
    )
);

如何做到这一点?

这可能会对您有所帮助,我正在使用您的
$result
数组作为输入,我知道您可以轻松地使用它

 [akshay@localhost tmp]$ cat test.php
 <?php

 $result = array (
   0 => 
   array (
     'category_id' => '1',
     'category_name' => 'Preschool',
     'quiz_id' => '1',
     'quiz_name' => 'What is Forex?',
     'question_id' => '1',
     'question' => 'In forex, what are the three main types of analysis?',
   ),
   1 => 
   array (
     'category_id' => '1',
     'category_name' => 'Preschool',
     'quiz_id' => '1',
     'quiz_name' => 'What is Forex?',
     'question_id' => '2',
     'question' => 'Which type of analysis looks at historical price movements to determine the current trading conditions?',
   ),
   2 => 
   array (
     'category_id' => '1',
     'category_name' => 'Preschool',
     'quiz_id' => '2',
     'quiz_name' => 'Why Trade Forex?',
     'question_id' => '',
     'question' => false,
   ),
 );

 $output = array();

 foreach( $result as $index => $row)
 {
    $inner_2 = array('question_id'=>$row['question_id'],'question'=>$row['question']);
    $inner_1 = array('quiz_id'=>$row['quiz_id'],'quiz_name'=>$row['quiz_name'], $row['quiz_name']=> array($inner_2));

    if(isset($output[$row['category_name']]))
    {
        $key = array_search($row['quiz_id'],array_column($output[$row['category_name']][$row['category_name']],"quiz_id"));

        if( $key !== false )
        {
            $output[$row['category_name']][$row['category_name']][$key][$row['quiz_name']][] = $inner_2; 
        }else
        {
            $output[$row['category_name']][$row['category_name']][] = $inner_1 ;
        }

    }else
    {
       $output[$row['category_name']] = array('category_id'=>$row['category_id'],'category_name'=> $row['category_name'],$row['category_name']=>array($inner_1));
    }
 }

 // Input 
 print_r($result);

 // Output
 print_r(array_values($output));

 ?>
--用于评论(因为可能是旧版本的php)--

if(!function_exists("array_column"))
{
    function array_column($array,$column_name)
    {
        return array_map(function($element) use($column_name){return $element[$column_name];}, $array);
    }
}

这可能会对您有所帮助,我正在使用您的
$result
数组作为输入,我知道您可以轻松地使用它

 [akshay@localhost tmp]$ cat test.php
 <?php

 $result = array (
   0 => 
   array (
     'category_id' => '1',
     'category_name' => 'Preschool',
     'quiz_id' => '1',
     'quiz_name' => 'What is Forex?',
     'question_id' => '1',
     'question' => 'In forex, what are the three main types of analysis?',
   ),
   1 => 
   array (
     'category_id' => '1',
     'category_name' => 'Preschool',
     'quiz_id' => '1',
     'quiz_name' => 'What is Forex?',
     'question_id' => '2',
     'question' => 'Which type of analysis looks at historical price movements to determine the current trading conditions?',
   ),
   2 => 
   array (
     'category_id' => '1',
     'category_name' => 'Preschool',
     'quiz_id' => '2',
     'quiz_name' => 'Why Trade Forex?',
     'question_id' => '',
     'question' => false,
   ),
 );

 $output = array();

 foreach( $result as $index => $row)
 {
    $inner_2 = array('question_id'=>$row['question_id'],'question'=>$row['question']);
    $inner_1 = array('quiz_id'=>$row['quiz_id'],'quiz_name'=>$row['quiz_name'], $row['quiz_name']=> array($inner_2));

    if(isset($output[$row['category_name']]))
    {
        $key = array_search($row['quiz_id'],array_column($output[$row['category_name']][$row['category_name']],"quiz_id"));

        if( $key !== false )
        {
            $output[$row['category_name']][$row['category_name']][$key][$row['quiz_name']][] = $inner_2; 
        }else
        {
            $output[$row['category_name']][$row['category_name']][] = $inner_1 ;
        }

    }else
    {
       $output[$row['category_name']] = array('category_id'=>$row['category_id'],'category_name'=> $row['category_name'],$row['category_name']=>array($inner_1));
    }
 }

 // Input 
 print_r($result);

 // Output
 print_r(array_values($output));

 ?>
--用于评论(因为可能是旧版本的php)--

if(!function_exists("array_column"))
{
    function array_column($array,$column_name)
    {
        return array_map(function($element) use($column_name){return $element[$column_name];}, $array);
    }
}

检查以下内容:

它将提供与您所需相同的输出: 它不会添加空问题数组

我还添加了另一个
“category_id”=>2
,它将被添加到主数组的下一个索引中

$array = Array
(
    0 => Array
        (
            "category_id" => 1,
            "category_name" => 'Preschool',
            "quiz_id" => 1,
            "quiz_name" => 'What is Forex?',
            "question_id" => 1,
            "question" => 'In forex, what are the three main types of analysis?',
        ),
    3 => Array
        (
            "category_id" => 2,
            "category_name" => 'Preschool2',
            "quiz_id" => 1,
            "quiz_name" => 'What is Forex?',
            "question_id" => 1,
            "question" => 'In forex, what are the three main types of analysis?',
        ),

    1 => Array
        (
            "category_id" => 1,
            "category_name" => 'Preschool',
            "quiz_id" => 1,
            "quiz_name" => 'What is Forex?',
            "question_id" => 2,
            "question" => 'Which type of analysis looks at historical price movements to determine the current trading conditions?',
        ),

    2 => Array
        (
            "category_id" => 1,
            "category_name" => 'Preschool',
            "quiz_id" => 2,
            "quiz_name" => 'Why Trade Forex?',
            "question_id" => '',
            "question" => ''
        )

);  




  function myfun($array){
$result= array();   
$insertTo = 0;
foreach($array as $key=>$value){
    $qArray = array('question_id' => $value['question_id'],'question' => $value['question']);
    if(!empty($result)){
        $check=false; 
        foreach($result as $k=>$v){
            if($value['category_id'] == $v['category_id']){
                if($value['question_id'] != '' && $value['question_id'] != ''){
                    $result[$k][$v['category_name']][$value['quiz_name']][]=$qArray;                
                }
                $check=true; 
            }
        }   
    if(!$check){
        $insertTo = count($result);
        $result[$insertTo]['category_id'] = $value['category_id'];
        $result[$insertTo]['category_name'] = $value['category_name'];
        $result[$insertTo][$value['category_name']]['quiz_id'] = $value['quiz_id'];
        $result[$insertTo][$value['category_name']]['quiz_name'] = $value['quiz_name'];
        if($value['question_id'] != '' && $value['question_id'] != ''){
            $result[$insertTo][$value['category_name']][$value['quiz_name']][] = $qArray;
        }
    }       
    }else{
        $result[$insertTo]['category_id'] = $value['category_id'];
        $result[$insertTo]['category_name'] = $value['category_name'];
        $result[$insertTo][$value['category_name']]['quiz_id'] = $value['quiz_id'];
        $result[$insertTo][$value['category_name']]['quiz_name'] = $value['quiz_name'];
        if($value['question_id'] != '' && $value['question_id'] != ''){
            $result[$insertTo][$value['category_name']][$value['quiz_name']][] = $qArray;
        }
    }

}
return $result;
}
    $result = myfun($array);
    echo '<pre>';
    print_r($result); 
$array=array
(
0=>数组
(
“类别id”=>1,
“类别名称”=>“学前班”,
“测验id”=>1,
“什么是外汇?”,
“问题id”=>1,
“问题”=>“在外汇中,三种主要的分析类型是什么?”,
),
3=>数组
(
“类别id”=>2,
“类别名称”=>“学龄前儿童”,
“测验id”=>1,
“什么是外汇?”,
“问题id”=>1,
“问题”=>“在外汇中,三种主要的分析类型是什么?”,
),
1=>数组
(
“类别id”=>1,
“类别名称”=>“学前班”,
“测验id”=>1,
“什么是外汇?”,
“问题id”=>2,
“问题”=>“哪种类型的分析着眼于历史价格变动来确定当前交易条件?”,
),
2=>数组
(
“类别id”=>1,
“类别名称”=>“学前班”,
“测验id”=>2,
“为什么要交易外汇?”,
“问题id=>”,
“问题”=>“
)
);  
函数myfun($array){
$result=array();
$insertTo=0;
foreach($key=>$value的数组){
$qArray=array('question\u id'=>$value['question\u id'],'question'=>$value['question']);
如果(!空($result)){
$check=false;
foreach($k=>v的结果){
如果($value['category\u id']=$v['category\u id'])){
如果($value['question\u id']!=''&$value['question\u id']!=''){
$result[$k][$v['category\u name'][$value['quick\u name']][]=$qArray;
}
$check=true;
}
}   
如果(!$支票){
$insertTo=计数($result);
$result[$insertTo]['category\u id']=$value['category\u id'];
$result[$insertTo]['category\u name']=$value['category\u name'];
$result[$insertTo][$value['category\u name']['quick\u id']=$value['quick\u id'];
$result[$insertTo][$value['category\u name']['quick\u name']=$value['quick\u name'];
如果($value['question\u id']!=''&$value['question\u id']!=''){
$result[$insertTo][$value['category\u name'][$value['quick\u name']]][]=$qArray;
}
}       
}否则{
$result[$insertTo]['category\u id']=$value['category\u id'];
$result[$insertTo]['category\u name']=$value['category\u name'];
$result[$insertTo][$value['category\u name']['quick\u id']=$value['quick\u id'];
$result[$insertTo][$value['category\u name']['quick\u name']=$value['quick\u name'];
如果($value['question\u id']!=''&$value['question\u id']!=''){
$result[$insertTo][$value['category\u name'][$value['quick\u name']]][]=$qArray;
}
}
}
返回$result;
}
$result=myfun($array);
回声';
打印(结果);
输出

检查以下内容:

它将提供与您所需相同的输出: 它不会添加空问题数组

我还添加了另一个
“category_id”=>2
,它将被添加到主数组的下一个索引中

$array = Array
(
    0 => Array
        (
            "category_id" => 1,
            "category_name" => 'Preschool',
            "quiz_id" => 1,
            "quiz_name" => 'What is Forex?',
            "question_id" => 1,
            "question" => 'In forex, what are the three main types of analysis?',
        ),
    3 => Array
        (
            "category_id" => 2,
            "category_name" => 'Preschool2',
            "quiz_id" => 1,
            "quiz_name" => 'What is Forex?',
            "question_id" => 1,
            "question" => 'In forex, what are the three main types of analysis?',
        ),

    1 => Array
        (
            "category_id" => 1,
            "category_name" => 'Preschool',
            "quiz_id" => 1,
            "quiz_name" => 'What is Forex?',
            "question_id" => 2,
            "question" => 'Which type of analysis looks at historical price movements to determine the current trading conditions?',
        ),

    2 => Array
        (
            "category_id" => 1,
            "category_name" => 'Preschool',
            "quiz_id" => 2,
            "quiz_name" => 'Why Trade Forex?',
            "question_id" => '',
            "question" => ''
        )

);  




  function myfun($array){
$result= array();   
$insertTo = 0;
foreach($array as $key=>$value){
    $qArray = array('question_id' => $value['question_id'],'question' => $value['question']);
    if(!empty($result)){
        $check=false; 
        foreach($result as $k=>$v){
            if($value['category_id'] == $v['category_id']){
                if($value['question_id'] != '' && $value['question_id'] != ''){
                    $result[$k][$v['category_name']][$value['quiz_name']][]=$qArray;                
                }
                $check=true; 
            }
        }   
    if(!$check){
        $insertTo = count($result);
        $result[$insertTo]['category_id'] = $value['category_id'];
        $result[$insertTo]['category_name'] = $value['category_name'];
        $result[$insertTo][$value['category_name']]['quiz_id'] = $value['quiz_id'];
        $result[$insertTo][$value['category_name']]['quiz_name'] = $value['quiz_name'];
        if($value['question_id'] != '' && $value['question_id'] != ''){
            $result[$insertTo][$value['category_name']][$value['quiz_name']][] = $qArray;
        }
    }       
    }else{
        $result[$insertTo]['category_id'] = $value['category_id'];
        $result[$insertTo]['category_name'] = $value['category_name'];
        $result[$insertTo][$value['category_name']]['quiz_id'] = $value['quiz_id'];
        $result[$insertTo][$value['category_name']]['quiz_name'] = $value['quiz_name'];
        if($value['question_id'] != '' && $value['question_id'] != ''){
            $result[$insertTo][$value['category_name']][$value['quiz_name']][] = $qArray;
        }
    }

}
return $result;
}
    $result = myfun($array);
    echo '<pre>';
    print_r($result); 
$array=array
(
0=>数组
(
“类别id”=>1,
“类别名称”=>“学前班”,
“测验id”=>1,
“什么是外汇?”,
“问题id”=>1,
“问题”=>“在外汇中,三种主要的分析类型是什么?”,
),
3=>数组
(
“类别id”=>2,
“类别名称”=>“学龄前儿童”,
“测验id”=>1,
“什么是外汇?”,
“问题id”=>1,
“问题”=>“在外汇中,三种主要的分析类型是什么?”,
),
1=>数组
(
“类别id”=>1,
“类别名称”=>“学前班”,
“测验id”=>1,
“什么是外汇?”,
“问题id”=>2,
“问题”=>“哪种类型的分析着眼于历史价格变动来确定当前交易条件?”,
),
2=>数组
(
“类别id”=>1,
“类别名称”=>“学前班”,
“测验id”=>2,
“为什么要交易外汇?”,
“问题id=>”,
“问题”=>“
)
);  
函数myfun($array){
$result=array();
$insertTo=0;
foreach($key=>$value的数组){
$qArray=array('question\u id'=>$value['question\u id'],'question'=>$value['question']);
如果(!空($result)){
$check=false;
foreach($k=>v的结果){
如果($value['category\u id']=$v['category\u id'])){
如果($value['question\u id']!=''&$value['question\u id']!=''){
$result[$k][$v['category\u name'][$value['quick\u name']][]=$qArray;
}
$check=true;
}
}   
如果(!$支票){
$insertTo=co