如何仅通过php获取2018年的记录
我想获取列表,他们在2019年没有行动,他们应该在2019年1月之前有唯一的行动。 对于不同的列表,有不同的带有时间戳的数组 下面是列表的一个数组。 它的名字列表1如何仅通过php获取2018年的记录,php,arrays,Php,Arrays,我想获取列表,他们在2019年没有行动,他们应该在2019年1月之前有唯一的行动。 对于不同的列表,有不同的带有时间戳的数组 下面是列表的一个数组。 它的名字列表1 Array ( [list] => Array ( [0] => Array ( [action] => open [timestamp] => 20
Array
(
[list] => Array
(
[0] => Array
(
[action] => open
[timestamp] => 2019-04-18T18:03:24+00:00
)
[1] => Array
(
[action] => click
[timestamp] => 2018-12-18T18:03:24+00:00
)
)
)
因此,在这种情况下,该记录不应打印,因为它在2019年有操作
其他列表有不同的数组
它的名字列表2
Array
(
[list] => Array
(
[0] => Array
(
[action] => open
[timestamp] => 2018-04-18T18:03:24+00:00
)
[1] => Array
(
[action] => open
[timestamp] => 2018-03-1T18:03:24+00:00
)
)
)
在这种情况下,此记录将被打印,因为它在2019年没有任何操作
我正在做什么来实现这一目标:
$date1 = "2018-12-31T024:00:00+00:00";
foreach ($list['list'] as $e) {
if($date1<$e['timestamp'])
echo $e['action'];
}
但它不会只显示2019年之前的记录。请指导我如何做到这一点。主要思想是使用DateTime,而不是字符串。最后,希望我做对了:
$latestDate=new\DateTime'2019-01-01';
记录=$api->getrecord/members?偏移量=0,计数=20;
foreach$records['members']作为$member{
$hash=md5$member['email_address'];
$lists=$api->getrecord/members/$hash/list;
foreach$lists['list']作为$action{
ifnew\DateTime$action['timestamp']>=$latestDate{
继续2;
}
}
var_dump$lists['list'];
}
您也可以使用它,并根据需要替换var_dump。从API检索数组时,只需使用PHP本机提供的Filtererator类即可。请看下面的示例
namespace App\Filter;
use DateTime;
use FilterIterator;
use Iterator;
class DateFilterIterator extends FilterIterator
{
protected $filter;
public function __construct(Iterator $iterator, $filter)
{
parent::__construct($iterator);
$this->filter = $filter;
}
public function accept()
{
$entry = $this->getInnerIterator()->current();
return (new DateTime($entry['timestamp']))->format('Y') !== $this->filter;
}
}
这是我们的过滤器,它将迭代api响应
$object = new ArrayObject($apiResponse);
$iterator = new DateFilterIterator($object->getIterator(), 2018);
foreach ($iterator as $entry) {
echo "<pre>";
var_dump($entry);
echo "</pre>";
}
当我们用2018年初始化过滤器时,我们将检索带有时间戳的数组条目,该时间戳适合2018年。使用FilterInterator类,您可以定义年份,并针对不同的筛选器值反复迭代api响应。过滤本身在一个简单的foreach循环/on迭代中执行
如果要筛选特定日期,则必须根据需要调整筛选器类的accept函数。我不确定,但您可以尝试我未测试的代码
这是来自数据库吗?为什么不从那里开始呢?因为标题不是来自db,而是来自API。但是API呢?任何一个好的API至少应该给你一些关于获取内容的选项。一次加载所有数据是不切实际的,但是为了过滤数组,是的,它可能是,它的数组_filter:D,或者您可以使用foreach,将两个日期转换为unix时间戳并进行比较,或者使用DateTime类我明白你的意思,但条件应该是什么?谢谢你,但如果数组的日期是2019年,我想跳过它。@Johny在你的问题中发布预期的输出。我已经编辑了这个问题,我想跳过列表1,因为它的日期是2019年。我只想打印列表2数组,因为它在2019年没有日期。如果它的日期是2019年,我想跳过整个数组。请尝试更清楚地表达您的想法。你输入了什么?数组的数组?两个阵列?输出中应该包含什么?2019以下无操作的阵列阵列?你可以在这里举个例子:
function filterDate($date)
{
$yearDate=date('Y', strtotime ($date['timestamp']));
if($yearDate==2018)
{
return $date;
}
}
$datesOnly2018=array_filter('filterDate',$list['list']);