在今年之前删除数组中的项目

时间:2019-05-22 11:03:28

标签: php arrays

我有一个数组,其中包含一些以下格式的日期。我想在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'));
});

2 个答案:

答案 0 :(得分:2)

您可以将array_filterdoc)与标志“ 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)

Demo link

您可以传递$ 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-将键作为回调的唯一参数传递   而不是值