一个这样的问题的解决方法(载自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 ' '.$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 于 北京
又偷学到了一招!
呵呵