一个这样的问题的解决方法(载自phpoo讨论区)

问题见:http://bbs.phpexp.cn/viewthread.php?tid=87&extra=page%3D1&authorid=0&page=1

这个问题的详细讨论大家可以参见我们的讨论区,如上地址。

现在我就来谈谈我的解题思路吧,当然,在我们的版块里,杨煌也给出了一种解决这类问题的方法,不过,如果你不仔细看,可以会被他的思路给绕进去,那人的解决思路一般都比较邪门,要看懂,你可能还得要多花费几分钟时间才行。

我的思路如下:

为了解决这样的问题,我们首先要想一下,什么样的数据才行让我们很方便的在外部输出我们想要的格式,只要把这问题给解决了,那么这题也就解决了1/3了。

我们要输出的格式如下:

1.中华人民共和国中华人民共和国  (大标题)

     1).中华人民共和国中华人民共和国(小标题)

     2).中华人民共和国中华人民共和国

     3).中华人民共和国中华人民共和国

2.中华人民共和国中华人民共和国

     1).中华人民共和国中华人民共和国

     2).中华人民共和国中华人民共和国

     3).中华人民共和国中华人民共和国

3.中华人民共和国中华人民共和国

     1).中华人民共和国中华人民共和国

     2).中华人民共和国中华人民共和国

     3).中华人民共和国中华人民共和国

如果要实现这样的效果,我们可以使用如下数据结构来完成该循环。。

 

<?php
    $a = array(
    'AAAAAAAAAA'    =>    array(
         'aaaaaaaaaa',
         'bbbbbbbbbb',
         'cccccccccc'
         ),
    'BBBBBBBBB'    =>    array(
         'aaaaaaaaaa',
         'bbbbbbbbbb',
         'cccccccccc'
         ),
    'CCCCCCCCC'    =>    array(
         'aaaaaaaaaa',
         'bbbbbbbbbb',
         'cccccccccc'
         )
    );

    foreach ($a as $k => $v) {
        echo $k.'<br>';
        if(is_array($v)) {
            foreach($v as $key => $val) {
                echo '&nbsp;&nbsp;'.$val.'<br>';
            }
        }
        echo '<br>';
    }
?>

运行效果如下:

 

AAAAAAAAAA
  aaaaaaaaaa
  bbbbbbbbbb
  cccccccccc

BBBBBBBBB
  aaaaaaaaaa
  bbbbbbbbbb
  cccccccccc

CCCCCCCCC
  aaaaaaaaaa
  bbbbbbbbbb
  cccccccccc

这样,就可以实现我们的效果。但是,这里的

$a = array(
    'AAAAAAAAAA'    =>    array(
         'aaaaaaaaaa',
         'bbbbbbbbbb',
         'cccccccccc'
         ),
    'BBBBBBBBB'    =>    array(
         'aaaaaaaaaa',
         'bbbbbbbbbb',
         'cccccccccc'
         ),
    'CCCCCCCCC'    =>    array(
         'aaaaaaaaaa',
         'bbbbbbbbbb',
         'cccccccccc'
         )
    );

这样的数据结构是我们人为构造的,所以这时,我们就得想办法,将数据库里的数据加工成这种格式,如果这一步完成,那么我们就成功了,所以这里的轮换是个关键点。

从数据库我们查询到的数据格式一般为:

big small
中国 中国北京
中国 中国台湾
美国 美国纽约

那么我们怎么转换它们了,在这里,大家一般不要想的太多,如果你把问题想复杂了,那么这问题就很难解决了,这里我们只需要巧妙的运行一下数据的键和值,那么这样的问题也就迎刃而解了。

我的方法如下:

 

$sql = "SELECT  a.Title AS big,b.Title AS small 
                FROM largeTitle AS a  LEFT JOIN smallTitle AS b ON a.ID=b.LlargeID"; 
    $a = array();
    //大家注意頙的代码

    $r = mysql_query($sql);

    while ( $arr = mysql_fetch_array($r) ) {
        $a[$arr['big']] = $arr['small'];
    }

    //$a 现在已经是我们所需要的数据结构了

呵呵,上面的while()循环里的数组,大家是不是现在被吃了一大惊。。

所以,解决问题里,不在于解决方法的复杂度,而在于方法的巧妙度,用最简单的方法解决最复杂的问题。。

好了,看奋斗了。看一集就睡觉。。

机器人 2007-11-5 9:55 于 北京

此条目发表在 phpoo 分类目录,贴了 , , 标签。将固定链接加入收藏夹。

一个这样的问题的解决方法(载自phpoo讨论区)》有 1 条评论

  1. bgo 说:

    又偷学到了一招!
    呵呵

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>