替换数组中最新的n个日期时间

时间:2014-06-20 16:49:48

标签: php datetime

我正在尝试从不是最老的2个MYSQLi查询中替换数组中的所有日期时间值。我尝试使用查询获取结果,但它似乎太复杂了,因为我需要为多个执行此操作列。有没有办法用PHP做到这一点?

所以如果:

$row["item"] =
"2014-01-01 00:00:00 2014-04-04 00:00:00 2014-02-02 00:00:00 2014-03-03 00:00:00"

返回:

$row["item"] = 
"2014-01-01 00:00:00 new 2014-02-02 00:00:00 new"

更新

道歉,我可能会弄错......如果我的会员列表是在while循环内创建的,甚至还是返回了一个数组,或者每次传递都返回一个$row["item1"], $row["item2"], etc.?我面临的挑战是比较每列(item1 - item10)的多行(我的成员)之间的日期时间。

当前计数器将项目限制为12,但没有考虑日期时间......

while ($row = mysqli_fetch_array($result)){

  if($row["item1"]!="0000-00-00 00:00:00"){ // if datetime is set
    $item1cnt++;                            // add one to counter
    if($item1cnt > 12){                     // if counter is greater than 12
      $row["item1"]="";                     // itemx = ""
    }else{                                  // if counter is less than 12
      $row["item1"]="item1";                // item = itemx
    }
  }else{                                    // if datetime is not set
      $row["item1"]="";                     // itemx = ""
   }

// repeat above for all 10 items


// part of member's listing used by jquery to filter services
$items[] = "<li class=\"services " . $row["item1"] . " " . $row["item2"] . " " . $row["item3"] . " " . $row["item4"] . " " . $row["item5"] . " " . $row["item6"] . " " . $row["item7"] . " " . $row["item8"] . " " . $row["item9"] . " " . $row["item10"] . "\">";

  }

//an example situation for listings...the first twelve list their services
<li class="services item1 item2 item3 item4       item6 item7 item8 item9 item10">
<li class="services item1 item2 item3 item4 item5 item6 item7 item8 item9 item10">
<li class="services item1 item2 item3 item4 item5 item6 item7 item8 item9 item10">
<li class="services item1 item2 item3 item4 item5 item6 item7 item8 item9 item10">
<li class="services item1 item2 item3 item4 item5 item6 item7 item8 item9 item10">
<li class="services item1 item2 item3 item4 item5 item6 item7 item8 item9 item10">
<li class="services item1 item2 item3 item4 item5 item6 item7 item8 item9 item10">
<li class="services item1 item2 item3 item4 item5 item6 item7 item8 item9 item10">
<li class="services item1 item2 item3 item4 item5 item6 item7 item8 item9 item10">
<li class="services item1 item2 item3 item4 item5 item6 item7 item8 item9 item10">
<li class="services item1 item2 item3 item4 item5 item6 item7 item8 item9 item10">
<li class="services item1 item2 item3 item4 item5 item6 item7 item8 item9 item10">

//then another lists for all 10 services(items) but only item5 is available. The
 current code accomplishes this.
<li class="services                         item5                               ">

但是,如果第一个成员决定提供item5,那么它将推迟新人。所以我需要使用datetime建立排名。

的解决方案

我的sql查询现在对每个项目使用LEFT JOINLIMIT。 @DarkSide提供了解决方案here

2 个答案:

答案 0 :(得分:1)

我认为您对要完成的任务有很好的SQL查询 https://stackoverflow.com/a/24225215/350021

但这是您当前问题的答案:

function transformItems($items, $preserve) {
    $items = array_map('rtrim', str_split($items, 20));
    asort($items);
    array_walk($items, function(&$val, $key, &$i) {
        if (--$i < 0) {
            $val = 'new';
        }
    }, $preserve);
    ksort($items);
    return implode(' ', $items);
}

// sample usage
$row["item"] = "2014-01-01 00:00:00 2014-04-04 00:00:00 2014-02-02 00:00:00 2014-03-03 00:00:00";
$row['item'] = transformItems($row['item'], 2);
// result: "2014-01-01 00:00:00 new 2014-02-02 00:00:00 new"

答案 1 :(得分:-1)

尝试将日期转换为时间戳(SQL):

UNIX_TIMESTAMP(DATE)

或php:

date("Y-m-d H:i:s", $unixTimestamp);

然后比较:

mktime(0) - 48*60*60