我有一个数组,里面存的每一个都是一个年月日的日期的时间戳,
类似如下
<code>$data_arr = array( strtotime("2015-08-01"), strtotime("2015-08-02"), strtotime("2015-08-03"), strtotime("2015-08-04"), strtotime("2015-08-05"), strtotime("2015-08-07"), strtotime("2015-08-09"), strtotime("2015-08-10"), strtotime("2015-08-13") ); </code>
这里面存放的是一个用户某一天没有交费。
现在希望能展示成
<code>2015-08-01 到 2015-08-05 未交费 2015-08-07 未交费 2015-08-09 到 2015-08-10 未交费 2015-08-13 未交费 </code>
类似的就是这个意思,
请问应该如何处理数组呢?
回复内容:
我有一个数组,里面存的每一个都是一个年月日的日期的时间戳,
类似如下
<code>$data_arr = array( strtotime("2015-08-01"), strtotime("2015-08-02"), strtotime("2015-08-03"), strtotime("2015-08-04"), strtotime("2015-08-05"), strtotime("2015-08-07"), strtotime("2015-08-09"), strtotime("2015-08-10"), strtotime("2015-08-13") ); </code>
这里面存放的是一个用户某一天没有交费。
现在希望能展示成
<code>2015-08-01 到 2015-08-05 未交费 2015-08-07 未交费 2015-08-09 到 2015-08-10 未交费 2015-08-13 未交费 </code>
类似的就是这个意思,
请问应该如何处理数组呢?
上面那位朋友运行报了notice错误(数组越界),试试我的代码
<code><?php $data_arr = array( strtotime("2015-08-01"), strtotime("2015-08-03"), strtotime("2015-08-04"), strtotime("2015-08-05"), strtotime("2015-08-06"), strtotime("2015-08-07"), strtotime("2015-08-09"), strtotime("2015-08-10"), strtotime("2015-08-13"), strtotime("2015-08-14"), strtotime("2015-08-15"), strtotime("2015-08-19"), strtotime("2015-08-20"), strtotime("2015-08-22"), ); array_push($data_arr, null); $start=null; for($i=1;$i<count($data_arr);$i++){ if($data_arr[$i]==$data_arr[$i-1]+24*3600){ if(!$start){ $start=$data_arr[$i-1]; } }else{ if($start){ echo date("Y-m-d",$start)."到".date("Y-m-d",$data_arr[$i-1])."未付款\n"; }else{ echo date("Y-m-d",$data_arr[$i-1])."未付款\n"; } $start=null; } } ?></code>
献丑了
你的问题是一个数组里面保存着一些时间戳,你需要格式化一下这些数据对吧。我建议的方案:首先把时间戳转为具体日期年月日,分割年份,月份,日期出来组装好一个多维数组;然后日期间对比是否相邻,月份和年份对比则是最后一天和最早一天是否相邻,符合相邻条件的把数组连接起来组成新的数组,大概就这么一个思路,由于存在不同年不同月的情况,所以可能会复杂一点,大概需要写一个二次遍历才行,希望能帮到你…
先排序,再遍历一遍
先把时间全部转化成unix时间戳,然后对数组做一次数字升序排序.然后设置起始时间后,不断跟后一个数来比对,是否相差1天,如果是则不断更新对应的结束时间,如果否则设置结束时间,并另外设置一个新的起始时间,你复制下我的代码跑下,就明白了.顺带说下,这段代码至少要php5.4以上的版本才能跑通,短数组语法只从5.4开始支持.望采纳
$data_arr = array( strtotime("2015-08-01"), strtotime("2015-08-02"), strtotime("2015-08-03"), strtotime("2015-08-04"), strtotime("2015-08-05"), strtotime("2015-08-07"), strtotime("2015-08-09"), strtotime("2015-08-10"), strtotime("2015-08-13") ); sort($data_arr); $vars = [];//大致的数据是key若为奇数,则为开始时间,若key为偶数则为结束时间 $vars[] = $data_arr[0];//开始时间 for ($i=0;$i<count($data_arr);$i++) { if (isset($data_arr[$i+1]) && ($data_arr[$i]+86400) == $data_arr[$i+1]) continue; else { $vars[] = $data_arr[$i]; if (isset($data_arr[$i+1])) $vars[] = $data_arr[$i+1]; } } foreach ($vars as $var) { echo date("Y-m-d",$var),"<br />"; }
前面一位朋友的程序运行了下,结果不是题主要的那种形式。请看我的程序。
<code><meta charset="utf-8"> <?php $data_arr = array( strtotime("2015-08-01"), strtotime("2015-08-03"), strtotime("2015-08-04"), strtotime("2015-08-05"), strtotime("2015-08-06"), strtotime("2015-08-07"), strtotime("2015-08-09"), strtotime("2015-08-10"), strtotime("2015-08-13"), strtotime("2015-08-14"), strtotime("2015-08-15"), strtotime("2015-08-19"), strtotime("2015-08-20"), strtotime("2015-08-22"), ); for ($i = 0; $i < count($data_arr); $i++) { if ($data_arr[$i - 1] + 24 * 3600 == $data_arr[$i] && $data_arr[$i + 1] - 24 * 3600 != $data_arr[$i]) { $end = $data_arr[$i]; echo date("Y-m-d", $start) . "到" . date("Y-m-d", $end) . "未交费<br>"; } if ($data_arr[$i + 1] - 24 * 3600 == $data_arr[$i] && $data_arr[$i - 1] + 24 * 3600 != $data_arr[$i]) { $start = $data_arr[$i]; } if ($data_arr[$i + 1] - 24 * 3600 != $data_arr[$i] && $data_arr[$i - 1] + 24 * 3600 != $data_arr[$i]) { echo date("Y-m-d", $data_arr[$i]) . "未交费<br>"; } } ?></code>
运行结果
<code>2015-08-01未交费 2015-08-03到2015-08-07未交费 2015-08-09到2015-08-10未交费 2015-08-13到2015-08-15未交费 2015-08-19到2015-08-20未交费 2015-08-22未交费</code>

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增强codemodocultion,可验证性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

选择DependencyInjection(DI)用于大型应用,ServiceLocator适合小型项目或原型。1)DI通过构造函数注入依赖,提高代码的测试性和模块化。2)ServiceLocator通过中心注册获取服务,方便但可能导致代码耦合度增加。

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)启用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替换loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

phpemailvalidation invoLvesthreesteps:1)格式化进行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)

tomakephpapplicationsfaster,关注台词:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

到ImprovephPapplicationspeed,关注台词:1)启用opcodeCachingwithapCutoredUcescriptexecutiontime.2)实现databasequerycachingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandredececonnection.4 limitsclection.4.4

依赖注入(DI)通过显式传递依赖关系,显着提升了PHP代码的可测试性。 1)DI解耦类与具体实现,使测试和维护更灵活。 2)三种类型中,构造函数注入明确表达依赖,保持状态一致。 3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

databasequeryOptimizationinphpinvolVolVOLVESEVERSEVERSTRATEMIESOENHANCEPERANCE.1)SELECTONLYNLYNESSERSAYCOLUMNSTORMONTOUMTOUNSOUDSATATATATATATATATATATRANSFER.3)


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

WebStorm Mac版
好用的JavaScript开发工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境