我有一个数组,其中包含一些以下格式的日期。我想在2019年之前删除带有钥匙的物品。
这是我到目前为止尝试过的代码。但是我没有任何结果。
有人可以帮我吗?
$array = [
"date_2018_08" => 81,
"date_2018_09" => 70,
"date_2018_10" => 70,
"date_2018_11" => 95,
"date_2018_12" => 75,
"date_2019_01" => 91,
"date_2019_02" => 78,
"date_2019_03" => 95,
"date_2019_04" => 68
];
$year = 2019;
$month = 4;
$array = array_filter($array,function($date){
$t1 = strtotime(str_replace(["date_", "_"], ["", "-"], $date));
return $t1 >= strtotime(str_replace(["date_", "_"], ["", "-"], '2019-01-01'));
});
答案 0 :(得分:2)
您可以将array_filter
(doc)与标志“ ARRAY_FILTER_USE_KEY”一起使用:
$year = 2019;
$filtered = array_filter(
$array,
function ($key) use ($year) {
$parts = explode("_", $key);
return $parts[1] >= $year;
},
ARRAY_FILTER_USE_KEY
);
实时示例:3v4l
已编辑:
使用简单的foreach
:
foreach($array as $k => $v) {
$parts = explode("_", $k);
if ($parts[1] >= $year)
$filtered[$k] = $v;
}
答案 1 :(得分:2)
您可以传递$ year和$ month来过滤数组,
$year = 2019;
$month = str_pad(4,2,"0",STR_PAD_LEFT); // pad to left with zero to match string
$temp = array_filter($array, function ($key) use ($year, $month) {
return (strpos($key, $year . "_" . $month) === false);
}, ARRAY_FILTER_USE_KEY);
print_r($temp);die;
strpos —查找字符串中第一次出现的子字符串的位置
array_filter —使用回调函数过滤数组的元素
str_pad —用另一个字符串将字符串填充到一定长度
注意:ARRAY_FILTER_USE_KEY-将键作为回调的唯一参数传递 而不是值