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