我从MySQL数据库中获取动物名称,类型,年龄等数组。我想将这些分成几个部分,如此......
Ages 5 - 10
Dog named Brian
Cat named Kitty
Dog named Buster
Ages 10+
Cat named Moody
Dog named Milo
以下是我现在正在做的事情(查询已按年龄排序):
while ($results = mysql_fetch_array($animals) {
if (($results[age] <= 10 && $results[age] >= 5) && !$head1 && !$head1display) {
$head1 = 'Ages 5 to 10<br />';
$head1display++;
} else $head1 = NULL;
if ($results[age] > 10 && !$head2 & !$head2display) {
$head2 = 'Ages 10+<br />';
$head2display++;
} else $head2 = NULL;
echo $head1.$head2.$results[type].' named '.$results[name].'<br />';
}
有更好的方法吗?请记住,我不想有两个查询或两个循环......
答案 0 :(得分:2)
我建议您在SQL中使用分组/排序来以正确的方式获取动物,例如:
$sql = "select type, name, if(age<5, 'Ages <5', if(age<10, 'Ages 5 - 10', 'Ages 10+)) "heading"
from animals
order by age";
然后在你的php中你几乎可以直接输出:
$heading = '';
while ($results = mysql_fetch_array($animals) {
if($results['heading'] != $heading) {
$heading = $results['heading'];
echo '<br/>' . $heading . '<br/>';
}
echo $results['type'].' named '.$results['name'].'<br />';
}
答案 1 :(得分:2)
使用此方法可能更容易阅读,但不确定其优化程度。我还假设$ result ['name']代表动物的名字
$younger = array();
$older = array();
while ($results = mysql_fetch_array($animals) {
if ($results['age'] <= 10 && $results['age'] >= 5) {
$younger[] = $result['type'].' named '.$result['name'];
}
if ($results['age'] > 10) {
$older[] = $result['type'].' named '.$result['name'];
}
}
if (count($younger)) {
echo 'Ages 5 to 10<br />';
join('<br />', $younger);
}
if (count($older)) {
echo 'Ages 10+<br />';
join('<br />', $older);
}
答案 2 :(得分:0)
您的代码中存在一些错误:
$results[type].' named '.$results[type]
我改为:
$results[type].' named '.$results[name]
这仅适用于数据库中有name
列的情况 - 相应更改。
$arr1 = array();
$arr2 = array();
while ($results = mysql_fetch_array($animals)) {
if ($results['age'] <= 10 && $results['age'] >= 5)
$arr1[] = $results['type'].' named '.$results['name'];
elseif($results['age'] > 10)
$arr2[] = $results['type'].' named '.$results['name'];
}
echo (sizeof($arr1)) ? 'Ages 5 to 10<br />'. implode('<br/>', $arr1).'<br/>' : '' . (sizeof($arr2)) ? 'Ages 10+<br />'. implode('<br/>', $arr2).'<br/>' : '';