douqianni4080 2014-06-20 16:49
浏览 33
已采纳

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

I'm trying to replace all datetime values in an array from a MYSQLi query that are not the oldest 2. I've tried getting the results with the query, but it seems too complex since I need to do this for multiple columns. Is there a way to do this with PHP?

So if:

$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"

Return:

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

Update

My apologies, I may be mistaken... if my member's listings are created within a while loop, is an array even returned, or is one $row["item1"], $row["item2"], etc. returned with each pass? The challenge I'm facing is comparing datetimes between multiple rows (my members) for each column (item1 - item10).

The current counter limits the items to 12, but does not take into account the datetimes...

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                               ">

However, if the first member decides to offer item5, it will push the new guy off. So I need to use datetime to establish rank.

Solution

My sql query now uses LEFT JOIN and LIMIT for each of the items. @DarkSide provided the solution here

  • 写回答

2条回答 默认 最新

  • douzuanze0486 2014-06-22 08:30
    关注

    I think you have good SQL query for what you are trying to accomplish in https://stackoverflow.com/a/24225215/350021

    But here is the answer for your current question:

    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条)

报告相同问题?

悬赏问题

  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入