我想将前面数据库查询出来的结果构建一个多维数组,数据库查询出来的第一个结果对应第一层嵌套,第二个结果对应第二层嵌套,如何做,事先声明我是菜鸟,请多指点// 查询变量

$sql1 = "select re,name from arp_careset where typegroup ='dissect-position' order by id"; 
$rs1 = mysql_query($sql1); 

while($r1 = mysql_fetch_assoc($rs1)) 
{ echo  $r1['name']; 

$sql = "select group_concat(name) as name from arp_careset where typegroup <>'dissect-position' and typegroup like '%".$r1["re"]."%' order by id";
$rs = mysql_query($sql); 

while($r = mysql_fetch_array($rs)) 
{ $ar = explode(',', $r['name']); 
echo join(' ', $ar); 
} }
//构建数组

$mem = array(
array
(
 lang_show(''),
array
(
// 嵌套开始
array(
lang_show('account_manager'),
//第二层嵌套
array(
'group_list.php,1',
)
//第二层嵌套结束
),
// 嵌套结束
)  
),
);

解决方案 »

  1.   

    这是我在论坛里提过的一个问题,有人给出了答案,但是后续问题没法解决,帖子地址是http://bbs.csdn.net/topics/390301127?page=1#post-393077862
      

  2.   

    你的数据组织给你的读出带来了很多不便
    这样写$rs = mysql_query("select name, SUBSTRING_INDEX(typegroup,'-',-1) as secondary, re from arp_careset where SUBSTRING_INDEX(typegroup,'-',1)='dissect'");
    while($r = mysql_fetch_assoc($rs)) {
      echo $r['name']. '<br />';
      $rs1 = mysql_query("select name, SUBSTRING_INDEX(typegroup,'-',-1) as secondary, re from arp_careset where SUBSTRING_INDEX(typegroup,'-',1)='$r[secondary]' and SUBSTRING_INDEX(typegroup,'-',-1) = '$r[re]'");
      while($r = mysql_fetch_assoc($rs1)) {
        echo $r['name'] . ' ';
      }
      echo '<br />';
    }体表
    营养状况 分泌物 被毛 皮肤 眼/眼眶 四肢/尾巴 乳腺 外生殖器 肛门 
    淋巴结
    腋窝淋巴结 颈部淋巴结 腹股沟淋巴结 肺部淋巴结 肠系淋巴结 
    头颈部
    眼睑/角膜/瞳孔 牙齿/牙龈 耳 鼻 脑膜/全脑 颅骨 唾液腺 食管 气管 甲状腺 
    胸部
    胸壁 横膈/纵膈 心脏 主动脉弓 肺及支气管 
    腹部
    腹腔 肠系膜 脾脏 胰 肾脏 
      

  3.   

    为什么说数据组织的不好呢?
    主分组 typegroup 包含了两个类别信息
    而按“邻接列表算法”应该只包含一个类别信息
    从你的数据上看,需要通过 typegroup、re 两个字段来唯一确认一个表象的归属
    这实际上就是“邻接列表算法”了虽然现在可以用 SUBSTRING_INDEX 函数去拆分 typegroup 来得到类别信息
    但 SUBSTRING_INDEX 函数是 mysql 专有的。如果因为某些原因,以后更换了数据库系统,那代码修改量就太大了虽然你可以将拆分的工作交给 php 完成,但众多的 like 将降低查询效率
    程序也显得比较臃肿
      

  4.   

    创建多维数组示意
    $res = array(); //这是结果数组
    $rs = mysql_query("select name, SUBSTRING_INDEX(typegroup,'-',-1) as secondary, re from arp_careset where SUBSTRING_INDEX(typegroup,'-',1)='dissect'");
    while($r = mysql_fetch_assoc($rs)) {
      $tmp = array(); //初始化一个临时数组
      $rs1 = mysql_query("select name, SUBSTRING_INDEX(typegroup,'-',-1) as secondary, re from arp_careset where SUBSTRING_INDEX(typegroup,'-',1)='$r[secondary]' and SUBSTRING_INDEX(typegroup,'-',-1) = '$r[re]'");
      while($r1 = mysql_fetch_assoc($rs1)) {
        $tmp[] = $r1['name']; //将数据加入临时数组
      }
      $res[] = $tmp; //将临时数组归入结果数组
    }
    每处存放什么内容,自己决定
      

  5.   

    老大,帮忙帮到底,我就想形成这样的数组,怎么弄?因为后面还有很复杂的处理过程,必须是这样的数组才能进行处理,我不想调整后面的程序,所以只能创建一个和这个一模一样的数组,拜托,这里先谢过了!
    $mem = array(
    array
    (
     lang_show(''),
    array
    (
    // 嵌套开始
    array(
    '体表',
    //第二层嵌套
    array(
    '营养状况',
    '分泌物',
    '被毛',
    '皮肤',
    '眼/眼眶',
    '四肢/尾巴',
    '乳腺',
    '外生殖器',
    '肛门',
    )
    //第二层嵌套结束
    ),
    // 嵌套结束
    // 嵌套开始
    array(
    '淋巴结',
    //第二层嵌套
    array(
    '腋窝淋巴结',
    '颈部淋巴结',
    '腹股沟淋巴结',
    '肺部淋巴结',
    '肠系淋巴结',
    )
    //第二层嵌套结束
    ),
    // 嵌套结束
    )  
    ),
    );
      

  6.   


    $res[] = $tmp; //将临时数组归入结果数组 
    改为
    $res[] = array$r['name'], $tmp);循环结束后
    $mem = array(
      array(
        lang_show(''),
        $res
      )
    );
       
      

  7.   

    非常感谢,已经出来了,但是后边的存储进数据库就乱码了,我就想用增加id来存储信息,这样就不会出错,应该是这个样子的才对,怎么实现?
     //第二层嵌套                 array(                 '营养状况,6',                 '分泌物,7',                 '被毛,8',                 '皮肤,9',                 '眼/眼眶,10',                 '四肢/尾巴,11',                 '乳腺,12',                 '外生殖器,13',                 '肛门,14',                 )             //第二层嵌套结束 
      

  8.   

    其实也不需要了,调整一下数据库也可以的,编码改成UTF8就可以了,我做好就结贴,非常感谢