热搜:NVER node 开发 php

PHP排序疑问

2024-09-19 21:05:02
PHP排序疑问

本帖最后由 u010801782 于 2013-07-30 23:32:15 编辑

<?phpfunction switchWeek($num){    switch ($num) {        case 1:            return '星期一';            break;        case 2:            return '星期二';            break;        case 3:            return '星期三';            break;        case 4:            return '星期四';            break;        case 5:            return '星期五';            break;        case 6:            return '星期六';            break;        case 7:            return '星期日';            break;         default:            return '';            break;    }}$con = mysql_connect("localhost","root","") or die('连接失败:'.mysql_error());mysql_select_db("testt");mysql_query('set names utf8');$sql = 'select * from news ';$result = mysql_query($sql);$array = array();while($row = mysql_fetch_array($result,MYSQL_ASSOC)){    $key = date('Y年m月d日',$row['sTime']).' '.switchWeek(date('N',$row['sTime']));    $array[$key][]=$row;}mysql_free_result($result);//var_dump($array);?>demo<?php foreach ($array as $key => $value) {array_multisort($sTime, SORT_ASC, $value);?>        <?php        foreach ($value as $k => $v)        {         $sTime[$key]  = $v['sTime'];			?>               <?php 	}	?><?php }?>
<?=$key?>
<?=date('H:i',$v['sTime'])?> <?=$v['title']?> <?php if(time() > $v['sTime'] && time() < $v['eTime'] ){ echo '开放中'; } if(time() < $v['sTime']){echo '暂未开放';} if(time() > $v['eTime']){echo '已过期';} ?>
已过期




最终效果如图,请问前端显示的时候如何按时间大小降序并且已经过期的行移动到已过期下面去。


回复讨论(解决方案)

先按是否过期进行排序,再按时间进行排序,order by 过期,time

如果仅仅是顺序排列,已过期的在下边未过期的在上边 各自按时间倒序排列

$sql = 'select * from news order by guoqi desc,time desc

如果需要将之分门别类 可以进行两次循环,未过期的列表位置循环一次,已过期的列表位置循环一次,直接在循环输出内容时判断过期与否的字段

如果仅仅是顺序排列,已过期的在下边未过期的在上边 各自按时间倒序排列

$sql = 'select * from news order by guoqi desc,time desc

如果需要将之分门别类 可以进行两次循环,未过期的列表位置循环一次,已过期的列表位置循环一次,直接在循环输出内容时判断过期与否的字段

需要分门别类的循环输出,请问如何实现?有实例吗?

<?php foreach ($array as $key => $value) {array_multisort($sTime, SORT_ASC, $value);?>        <?php        foreach ($value as $k => $v)        { 		if(time() <= $v['eTime']){			$sTime[$key]  = $v['sTime'];    			?>		           <?php 		}    }    ?><?php }?><?php foreach ($array as $key => $value) {array_multisort($sTime, SORT_ASC, $value);?>        <?php        foreach ($value as $k => $v)        { 		if(time() > $v['eTime']){			$sTime[$key]  = $v['sTime'];    			?>		           <?php 		}    }    ?><?php }?>
<?=$key?>
<?=date('H:i',$v['sTime'])?> <?=$v['title']?> <?php if(time() > $v['sTime'] && time() < $v['eTime'] ){ echo '开放中'; } if(time() < $v['sTime']){echo '暂未开放';} ?>
已过期
<?=$key?>
<?=date('H:i',$v['sTime'])?> <?=$v['title']?> 已过期


两次循环  循环中判断是否过期  已过期的下边显示 其他的上边显示