使用数组过滤列出echo的目录

时间:2018-05-17 15:03:29

标签: php

这段代码有效:

<?php
header('Access-Control-Allow-Origin: *');
$imagesDir = '';
$images = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);
echo json_encode($images, JSON_UNESCAPED_UNICODE);
?>

我在文件夹中找到所有jpg的正确回声,如下所示:

[
    "20180515_xxxxxxx.jpg",
    "20180517_yyyyyyy.jpg",
    "20180519_zzzzzzzz.jpg"
]

但我希望每个日期进行一定的过滤(只有名称以日期&gt; =比今天开始的图像),因为所有的jpg文件名都以其名称中的yyyymmdd开头。

我正在尝试这样的事情:

<?php
header('Access-Control-Allow-Origin: *');
$imagesDir = '';
$images = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);

foreach($images as $image) {
    $current_date = date("Ymd");
    $file_date = substr($image, 0, 8);
    if (strcmp($current_date, $file_date)>=0)
    echo json_encode($image, JSON_UNESCAPED_UNICODE);
    }
?>

但我得到的回声就像一个巨大的名字由所有图像名称组成。 我只是不能以相同的格式得到回声。 :(

2 个答案:

答案 0 :(得分:1)

您正在回显每个图像的JSON字符串。

而不是:

ConstraintLayout 2.0

尝试添加数组并收集它们。

foreach($images as $image) {
    $current_date = date("Ymd");
    $file_date = substr($image, 0, 8);
    if (strcmp($current_date, $file_date)>=0)
        echo json_encode($image, JSON_UNESCAPED_UNICODE);
}

您可以在过滤器中使用$filteredImages = []; foreach($images as $image) { $current_date = date("Ymd"); $file_date = substr($image, 0, 8); if (strcmp($current_date, $file_date)>=0) $filteredImages[] = $image } echo json_encode($filteredImages, JSON_UNESCAPED_UNICODE); ,而不是使用今天的日期作为文件名的一部分,以避免不得不循环使用。

答案 1 :(得分:0)

你有一个数组,你想过滤它。

有一个名为array_filter的内置函数,它接收一个数组,你可以提供一个回调函数。

我还建议将日期转换为实际的DateTime对象。好处是您可以将if语句中的DateTimes与所有比较运算符进行比较:

<?php

function parseDate(string $date, $format = "Ymd")
{
    return DateTime::createFromFormat($format, $date)
        ->setTime(0, 0, 0);
}

$today = (new DateTime())->setTime(0, 0);
$filterCallback = function (string $file) use ($today): bool {
    $rawDate = explode("_", $file)[0]; // assumes all your date in the filename are followed up by at least one underscore
    $date = parseDate($rawDate);

    return $date >= $today;
};

$files = [
    "20180515_xxxxxxx.jpg",
    "20180517_yyyyyyy.jpg",
    "20180519_zzzzzzzz.jpg",
    "20250519_zzzzzzzz.jpg",
];

$filteredFiles = array_filter($files, $filterCallback);

foreach ($filteredFiles as $file) {
    echo "$file\n";
}

将输出:

20180519_zzzzzzzz.jpg
20250519_zzzzzzzz.jpg