PHP-php数组分组有哪些良好的思路
<?php
$arr = array(
0=>array(
"question"=>"问题1",
"answer"=>"A"
),
1=>array(
"question"=>"问题2",
"answer"=>"AA"
),
2=>array(
"question"=>"问题1",
"answer"=>"B"
),
3=>array(
"question"=>"问题1",
"answer"=>"C"
),
4=>array(
"question"=>"问题2",
"answer"=>"BB"
),
5=>array(
"question"=>"问题1",
"answer"=>"D"
),
6=>array(
"question"=>"问题2",
"answer"=>"CC"
),
7=>array(
"question"=>"问题2",
"answer"=>"DD"
)
);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这种问题的关键是多个answer要归属于一个question,而一个question有要归属于一个新的index
那么我们首先可以通过建立新的结构
$result[0] = array('question'=>question,'answer'=>'');
这样我们就把question归属到一个新的index上了
怎么把answer归属于一个question呢,我们只知道question而不知道$result的index,但是我们建立上面的结构时知道question和index有一个映射关系,我们就把这个映射关系记录下来
$indexs[question] = 0;
那么我们就可以通过indexs的映射关系知道$result的index的索引,answer就可以通过找相应的question找出相应的存放位置
$result[$indexs[question]]['answer'][] = answer
<?php
$arr = array(
0=>array(
"question"=>"问题1",
"answer"=>"A"
),
1=>array(
"question"=>"问题2",
"answer"=>"AA"
),
2=>array(
"question"=>"问题1",
"answer"=>"B"
),
3=>array(
"question"=>"问题1",
"answer"=>"C"
),
4=>array(
"question"=>"问题2",
"answer"=>"BB"
),
5=>array(
"question"=>"问题1",
"answer"=>"D"
),
6=>array(
"question"=>"问题2",
"answer"=>"CC"
),
7=>array(
"question"=>"问题2",
"answer"=>"DD"
)
);
$indexs = array();
$result = array();
foreach($arr as $v) {
$key = $v['question'];
if(!isset($indexs[$key])) {
$index = count($result);
$result[$index] = array('question'=>$v['question'],'answer'=>array());
$indexs[$key] = $index;
}
$result[$indexs[$key]]['answer'][] = $v['answer'];
}
var_dump($result);
确定你要分组的依据就好,就相当于sql里的group by .
譬如这里,你是以question来分组的,所以,每个question里面的值是标识(即使是中文又怎么样)。
$format_result = array();
foreach ($arr as $key => $value )
{
if( !isset($format_result[$value['question']]) )
{
$format_result[$value['question']] = array( 'question' => $value['question'], 'answer' => array());
}
$format_result[$value['question']]['answer'][] = $value['answer'];
}
$format_result = array_values($format_result);
var_export($format_result);