我正在尝试从不是最老的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 JOIN
和LIMIT
。 @DarkSide提供了解决方案here
答案 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